我明白那个
char *s = "Hello World!" ;
存储在只读内存中,字符串文字不能通过指针修改。
这与
const char *s = "Hello World!";
'string' char * 或 const char * 的类型也是?
区别在于后者是合法的,而前者是不合法的。这是在 C++11 中所做的更改。形式上,"Hello World!"
有类型const char[13]
;它可以转换为const char*
. 在过去,它的类型可以是char[13]
,可以转换为char*
. C++ 通过添加 更改了数组的类型const
,但保留了转换,char*
以便使用的现有 C 代码char*
可以在 C++ 中工作,但修改指针指向的文本会产生未定义的行为。C++11 删除了对 的转换char*
,所以现在你只能合法地做
const char *s = "Hello world!";
通过将类型指定为const char *
,它会更难意外覆盖内存,因为如果您尝试编译器将给出错误:
const char *s = "Hello World!";
s[0] = 'X'; // compile error
如果你不使用const
,那么问题可能直到运行时才被发现,或者它可能只是导致你的程序出现微妙的错误。