c - 为什么没有不可变的整数集而不可变的字符集是可能的?

标签 c string pointers char integer

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 类型,尽管它是不可变的。但是使用 const char * 指向它们是个好主意,这样编译器就会检测到您何时尝试写入它们。

const 类型的复合文字可能会像字符串文字一样“折叠”,即它们可能与其他此类复合文字重叠。非常量复合文字确实具有唯一地址并且可以写入。

关于c - 为什么没有不可变的整数集而不可变的字符集是可能的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28923809/

相关文章:

string - 默认情况下 Erlang 二进制字符串

Python:如何找到两个字符串列表之间的差异?

c - 为什么要在函数 strtod() 中使用 (char **endptr) 而不是 (char ch) 或 (char *chptr)

c - C中的这段代码是否属于未定义行为类别?

c - .LANCHOR0 在检测多重定义错误中的作用是什么?

我可以在 for block 中使用 uint64_t 吗?

c - 使用 scanf() 读取不超过字符串的大小

使用指针更改字符数组的字符

c++ - 指向基类的指针

c++ - 异步事件循环设计和问题