可能重复:
What is the difference between char a[] = “string”; and char *p = “string”;
请您解释一下这些有什么区别? ^^
//difference between:
char* sz1 = "blah";
char sz2[] = "blah";
//and also please explain these
char *sz3 = new char[512];
char *sz4[512] = { 0, };
char sz5[512];
答案 0 :(得分:2)
"blah"
是const char [5]
。在第一行中,该数组被衰减为一个指针,该指针将作为指向第一个元素的指针存储在您的变量中。它也是指向const字符的非const字符的指针。它应该是:
const char *sz1 = "blah";
在第二个(感谢jrok)中,它创建一个实际的数组并用{'b', 'l', 'a', 'h', '\0'}
初始化它。
char *sz3 = new char[512];
这为字符分配512 * sizeof (char)
字节的内存,sz3
将指向开头。这存储在堆上,而不是堆栈,所以不要忘记delete[]
它。
char *sz4[512] = { 0, };
这将创建一个包含512个字符指针的数组,并将它们全部初始化为0(NULL)。不需要逗号,之后添加到初始化列表中会更容易。此处spiral rule可用于确定sz4 is an array of 512 (one right) pointers (one left) to char (two left)
。
char sz5[512];
这将创建一个512个字符的数组(在堆栈上)。
除了倒数第二个以外的所有内容都可以有效地替换为std::string
。
答案 1 :(得分:-1)
前两个示例基本相同,char指针在运行时为其分配了内存。
第三个,你正在分配512字节的内存,并为sz3分配它的地址。
对于第四个,你要声明一个包含512个char指针的数组,但你的任务(据我所知)是不正确的。
最后,第五个语句创建一个包含512个字符的数组。