2013-07-02 230 views
2

char *p = "a";有效,但不是int *p = 2;char *p = 'a';他们为什么这样设计?指针初始化

+0

“while”和“do ... while”的必要性是什么?不应该“够”吗?技术上是的,但所有三个都给出了更清楚地表达自己的选项。 – Jon

+0

1)“a”在内存中有一些不变的地址,但不是2。 2)在**之前**或**之前增加**。 –

+2

“a”是一个可以转换为char *的char []。 – user1937198

回答

4

任何东西C.So

char *p = " a"被视为字符串说你逝去的字符串的基地址为char pointer.which是有效的。

int *pp是一个整数指针,所以p可以容纳一个地址为整数,所以int *p = 2是无效的。

同样char *p是指向性格让p可容纳一个字符的地址,以便char *p = 'a'是无效的,因为'a'只是一个字符不能解决字符。

1

因为"a"有一个类型的char *,并2没有一个类型的int *。请注意0​​也是无效的。

3

一个字符串文字类型是char[n],并且指派给char*没问题。
点都是指针。

char *p = "a";意味着p点串"a"(在存储器中的某些地方,的"a"类型为char[2])。

p   23 24 
    +----+  +----+----+ 
    | 23 |  | a | \0 |   
    +----+  +----+----+ 

2'a'是整型值,不是一个有效的地址因此,以下声明是错误/警告:"initialization makes pointer from integer without a cast"

int *p = 2; and 
char *p = 'a'; 

:在一个字符常量是int型,但是不是 char refrence。里面" " wrritten

+0

实际上,由于历史原因,字符串文字具有'char *'类型,即使您不应该尝试修改其内容。 –

+0

严格来说,字符串文字是一个数组,而不是指针。它(和其他数组一样)在大多数情况下衰减为指向其第一个元素的指针。 –

+0

@CarlNorum你的意思是'char []'不是'const char *'? –