有人能给我解释一下这几行代码有什么区别吗?
char *p = "String";
char p2[] = "String";
char p3[7] = "String";
在什么情况下,我应该使用上面的每一个?
发布于 2012-01-05 03:00:00
This link应该能满足你的好奇心。
基本上(忘记你的第三个不好的例子),1和2的不同之处在于1为指向数组的指针分配空间。
但在代码中,您仍然可以将它们作为指针进行操作--唯一的问题是,您不能重新分配第二个指针。
发布于 2012-01-05 03:03:49
C中的字符串表示为字符数组。
char *p = "String";
根据C编程语言2版,您声明了一个指向存储在程序中某个位置的字符串的指针(修改此字符串是未定义的行为)。
char p2[] = "String";
您声明了一个用字符串" string“初始化的char数组,将计算数组大小的工作留给了编译器。
char p3[5] = "String";
您声明了一个大小为5的数组,并使用"String“对其进行了初始化。这是一个错误,因为"String“不适合5个元素。
char p3[7] = "String";
是正确的声明('\0‘是c字符串中的终止字符)。
发布于 2012-01-05 02:58:09
你不应该使用第三个,因为它是错误的。"String“需要7个字节,而不是5个字节。
第一个是指针(可以重新分配到不同的地址),另外两个声明为数组,不能重新分配到不同的内存位置(但它们的内容可能会发生变化,请使用const
避免这种情况)。
https://stackoverflow.com/questions/8732325
复制相似问题