char *str = "Hey baby";
为字符串和点创建内存 str
它。如果这是有效的,为什么不是以下内容:
int *x = {7, 0, 1};
除了它们之外,这应该做同样的事情 int
而不是 char
秒。
char *str = "Hey baby";
为字符串和点创建内存 str
它。如果这是有效的,为什么不是以下内容:
int *x = {7, 0, 1};
除了它们之外,这应该做同样的事情 int
而不是 char
秒。
有“一成不变的整体”,它看起来像:
(const int[]){7, 0, 1}
适当的术语是 复合字面量。你可以指出它:
const int *ptr = (const int[]){7, 0, 1};
由于历史原因,字符串文字没有 const
虽然是不可改变的类型。但是使用a是个好主意 const char *
指向它们,以便编译器在您尝试写入一个时检测到它。
复合文字与 const
类型可以以与字符串文字相同的方式“折叠”,即它们可以与其他这样的复合文字重叠。非const复合文字确实有唯一的地址,可以写入。
为什么在不可变的字符集可能的情况下不能使用一组不可变的整数?
原因是这样的陈述
int *x = {7, 0, 1};
是违反约束。它取决于编译器如何处理它。
如果预处理转换单元或转换单元包含违反任何语法规则或约束的情况,则符合的实现应生成至少一个诊断消息(以实现定义的方式标识),即使该行为也明确指定为未定义或实现 - 定义
在大多数情况下,编译器不会发出任何警告 -pedantic -Wall -Wextra
标志不用于编译。一个 GCC中的错误 报告此格式错误的初始化。
一组不可变的 int
可以使用创建 const
限定符为
int const x[] = {7, 0, 1};