为什么在不可变的字符集可能的情况下不能使用一组不可变的整数?

tom*_*mol 11 c string pointers integer char

char *str = "Hey baby";
Run Code Online (Sandbox Code Playgroud)

为字符串创建内存并指向str它.如果这是有效的,为什么不是以下内容:

int *x = {7, 0, 1};
Run Code Online (Sandbox Code Playgroud)

这应该做同样的事情,除了它们是ints而不是chars.

M.M*_*M.M 13

有"不可变的一组内容",它看起来像:

(const int[]){7, 0, 1}
Run Code Online (Sandbox Code Playgroud)

适当的术语是复合文字.你可以指出它:

const int *ptr = (const int[]){7, 0, 1};
Run Code Online (Sandbox Code Playgroud)

由于历史原因,const尽管字符串文字是不可变的,但它们没有类型.但是使用a const char *来指向它们是个好主意,这样编译器会在你尝试写入一个时检测到它.

具有const类型的复合文字可以与字符串文字相同的方式"折叠",即它们可以与其他此类复合文字重叠.非const复合文字确实有唯一的地址,可以写入.