我理解
char *s = "Hello World!" ;
存储在只读存储器中,并且不能通过指针修改字符串文字。
这与
有什么不同const char *s = "Hello World!";
'string'char *或const char *的类型?
答案 0 :(得分:8)
不同之处在于后者是合法的而前者不是。这是在C ++ 11中做出的改变。形式上,"Hello World!"
的类型为const char[13]
;它可以转换为const char*
。在过去,它的类型可以是char[13]
,可以转换为char*
。 C ++通过添加const
来更改数组的类型,但保持转换为char*
,以便使用char*
的现有C代码可以在C ++中工作,但修改指针的文本指出产生了未定义的行为。 C ++ 11删除了转换为char*
,所以现在你只能合法地执行
const char *s = "Hello world!";
答案 1 :(得分:6)
通过将类型设置为const char *
,会使意外覆盖内存变得更加困难,因为如果您尝试编译器将会出错:
const char *s = "Hello World!";
s[0] = 'X'; // compile error
如果你不使用const
,那么问题可能会在运行时才被捕获,或者它可能只会导致你的程序出现严重错误。