指针初始化

时间:2013-07-02 15:28:23

标签: c

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

3 个答案:

答案 0 :(得分:4)

" "内的任何内容都被认为是C.So

中的字符串

char *p = " a"表示您将字符串的基址传递给char指针。它是有效的。

int *p表示p是指向整数的指针,因此p可以将地址保存为整数,因此int *p = 2无效。

类似地,char *p是指向字符的指针,因此p可以保存字符的地址,因此char *p = 'a'无效,因为'a'只是一个不是字符地址的字符。

答案 1 :(得分:3)

一个字符串文字类型为char[n],对char*的分配很好 Point是两个指针。

char *p = "a";表示p指向字符串"a"(某些位于内存中,"a"的类型为char[2])。

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

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

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

注意:在中,char常量是int类型,但不是 char refrence

答案 2 :(得分:1)

因为"a"的类型为char *,而2的类型不是int *。请注意,char *p = 'a'也无效。