【问题标题】:What is the difference between these? (char) [duplicate]这些有什么区别? (字符)[重复]
【发布时间】:2012-06-15 18:16:46
【问题描述】:

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

【问题讨论】:

  • 也许你可以开始看看你能走多远,然后其他人可以帮助你解决错误的部分。
  • 我发誓这个问题是昨天才提出的。
  • 不,不是,我在自学 C++。只是想知道。

标签: c++ arrays pointers char


【解决方案1】:

"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)。不需要逗号,之后添加到初始化列表中会更容易。此处可以使用spiral rule 来确定@​​987654331@。

char sz5[512];

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

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

【讨论】:

  • char sz2[] = "blah"; 完全可以,它只是char sz2[] = {'b','l','a','h','\0'};的简写
  • @jrok,好点子。我还在考虑指针。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 2020-05-19
    • 2021-02-01
    • 2020-06-28
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多