任何人都可以解释一下这些代码行之间有什么区别
char *p = "String";
char p2[] = "String";
char p3[7] = "String";
我应该在什么情况下使用以上各项?
答案 0 :(得分:43)
This link应该满足你的好奇心。
基本上(忘记你的第三个不好的例子),1和2之间的不同之处是1为指向数组的指针分配空间。
但是在代码中,你可以将它们作为指针进行操作 - 唯一的,你不能重新分配第二个。
答案 1 :(得分:36)
C中的字符串表示为字符数组。
char *p = "String";
根据C编程语言2 ed,您声明指向存储在程序中某个位置的字符串的指针(修改此字符串是未定义的行为)。
char p2[] = "String";
您正在声明一个使用字符串" String"初始化的char数组。将作业留给编译器来计算数组的大小。
char p3[5] = "String";
您正在声明一个大小为5的数组并使用" String"初始化它。这是一个错误原因" String"不适合5个元素。
char p3[7] = "String";
是正确的声明(' \ 0'是c字符串中的终止字符)。
答案 2 :(得分:20)
你不应该使用第三个,因为它错了。 “String”需要7个字节,而不是5个字节。
第一个是指针(可以重新分配给不同的地址),另外两个被声明为数组,不能重新分配到不同的内存位置(但是它们的内容可能会改变,使用const
来避免这一点)。
答案 3 :(得分:7)
char *p = "String"; means pointer to a string type variable.
char p3[5] = "String"
;表示您预先定义的数组大小不超过5个元素。注意,对于字符串,null" \ 0"也被认为是一个元素。所以,这个语句会给出一个错误,因为元素的数量是7所以它应该是:
char p3[7]= "String";