-5

可能重复:
char a[] = “string”; 之间有什么区别?和 char *p = “字符串”;

你能解释一下这些有什么区别吗?^^

            //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];
4

2 回答 2

2

"blah"是一个const char [5]。在第一行中,该数组被衰减为一个指针,该指针作为指向第一个元素的指针存储在您的变量中。它也是指向 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)。不需要逗号,之后添加到初始化列表中会更容易。这里可以使用螺旋法则sz4 is an array of 512 (one right) pointers (one left) to char (two left)来确定。

char sz5[512];

这将创建一个包含 512 个字符的数组(在堆栈上)。

除了倒数第二个之外的所有内容都可以有效地替换为std::string.

于 2012-06-12T20:05:41.187 回答
-1

前两个示例本质上是相同的,都是在运行时为它们分配内存的 char 指针。

第三个,您分配了 512 字节的内存,并为 sz3 分配了它的地址。

对于第四个,您声明了一个由 512 个字符指针组成的数组,但您的分配(据我所知)是不正确的。

最后,第五条语句创建了一个包含 512 个字符的数组。

于 2012-06-12T20:05:14.350 回答