这些有什么区别? (炭)

时间:2012-06-12 19:55:59

标签: c++ arrays pointers char

  

可能重复:
  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];

2 个答案:

答案 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个字符的数组。