【发布时间】:2015-05-09 12:50:34
【问题描述】:
char *str = "Hey baby";
为字符串创建内存并将str 指向它。如果这是有效的,为什么不如下:
int *x = {7, 0, 1};
这应该做同样的事情,除了他们是ints 而不是chars。
【问题讨论】:
-
你可以这样做: int x[ ] = { 7, 0, 1 };但 x 是可变的。另外,
str真的应该是: const char *str = "Hey baby"; -
因为 C 标准对字符串字面量进行了特殊处理,因为它们是如此常见和有用,但对于一般的数组字面量则不存在这样的概念。
-
这种“为什么”的问题很难客观地回答,因为只有语言的设计者才能给出明确的答案;其他人都会猜测。
-
虽然对于刚接触一门语言的人来说,并不总是清楚是设计师的心血来潮,所以这些问题对于区分“它很神秘,但这就是如何”很有价值从“没有人知道,也没有办法”。
-
这是另一个有趣的花絮:char str[5] = "Hello";是合法的,不会有 nul 终止符 while: char str[6] = "Hello";也是合法的,但会有一个 nul 终止符。
标签: c string pointers char integer