char *p = "a";
有效,但不是int *p = 2;
和char *p = 'a';
为什么他们的设计是这样的?
答案 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';
答案 2 :(得分:1)
因为"a"
的类型为char *
,而2
的类型不是int *
。请注意,char *p = 'a'
也无效。