【发布时间】:2019-11-07 21:24:13
【问题描述】:
这两个在 C 中有何不同?
char str[] = "xyz"; // statement 1
//and
char str[4] = "xyz"; // statement 2
根据我的理解,第一个分配一个指向字符串文字的指针,而第二个是一个 4 个字符的字符数组(包括NULL 字符)。
但是如果是这样的话,这两个是怎么存入内存的呢?
【问题讨论】:
-
他们不是。两者都是静态分配的 4 个元素的字符数组(其中第四个是 NUL 终止符
\0)。 -
没有。两种情况是等价的。这个会有所不同:
char *str = "xyz";将属于您的第一个描述。 -
看看区别:godbolt.org/z/fSh5qR(编译后的代码是一样的)
-
第一个分配一个指向字符串文字的指针你从哪里得到这个想法?这完全是假的。
标签: c string memory-management