为什么 C++ 中不能有非常量 char* ?

Twi*_*ard 2 c++ arrays pointers

为什么这有效:

char foo[6] = "shock";`
Run Code Online (Sandbox Code Playgroud)

虽然这不起作用:

char* bar = "shock"; //error
Run Code Online (Sandbox Code Playgroud)

为什么bar必须是constfoo不是?fooC 中的数组衰减为指针,因此技术上和不bar具有相同的类型吗?

Ben*_* A. 7

文字保存在内存的保留区域中,不应由代码更改。更改存储该文字的地址处保存的值意味着每次任何其他代码尝试使用该文字时,它都会在该内存中找到错误的值。因此修改该内存是非法的,因此将其视为不恒定也是非法的。

来源


Gal*_*lik 7

有了这个声明:

char foo[6] = "shock";
Run Code Online (Sandbox Code Playgroud)

变量foochar 类型的数组,它包含 6 个非常量字符。字符串文字包含常量字符,这些字符在初始化时复制到数组中。

有了这个声明:

char* bar = "shock"; //error
Run Code Online (Sandbox Code Playgroud)

变量bar指向 char 的类型指针。您试图使其指向"shock"包含 的字符串文字的地址const char

您不能将指针指向const char处的非 const char 。

所以你必须这样做:

const char* bar = "shock";`
Run Code Online (Sandbox Code Playgroud)