char* const p = "world";
p[2] = 'l';
第一条语句创建了一个由常量指针p指向的字符串,第二条语句试图修改字符串,被编译器接受,而在运行时,弹出访问冲突异常,谁能解释为什么?
最佳答案
所以你的问题有两个方面:
为什么会出现访问冲突:字 rune 字字符串作为文字存储在可执行程序的 CODE 页中;大多数现代操作系统不允许更改这些页面(包括 MS-windows),因此出现保护错误。
为什么编译器允许它:const 关键字在此上下文中指的是指针而不是它指向的东西。代码如 p="Hello";将导致编译器错误,因为您已将 p 声明为常量(不是 *p)。如果您想将它指向的东西声明为常量,那么您的声明应该是 const char *p。
关于带有运算符[]的c++ const指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18765975/