带有运算符[]的c++ const指针

标签 c++ pointers operator-keyword

char* const p = "world";
p[2] = 'l';

第一条语句创建了一个由常量指针p指向的字符串,第二条语句试图修改字符串,被编译器接受,而在运行时,弹出访问冲突异常,谁能解释为什么?

最佳答案

所以你的问题有两个方面:

  1. 为什么会出现访问冲突:字 rune 字字符串作为文字存储在可执行程序的 CODE 页中;大多数现代操作系统不允许更改这些页面(包括 MS-windows),因此出现保护错误。

  2. 为什么编译器允许它:const 关键字在此上下文中指的是指针而不是它指向的东西。代码如 p="Hello";将导致编译器错误,因为您已将 p 声明为常量(不是 *p)。如果您想将它指向的东西声明为常量,那么您的声明应该是 const char *p。

关于带有运算符[]的c++ const指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18765975/

相关文章:

c++ - 在 Linux 中为 USB 大容量存储设备禁用读取缓冲

强制转换为 C99 中的指针数组

c++ - 将 char 指针传递给 cin 和 cin.get()

pointers - &deployment 如何满足 kubernetes 代码中的 runtime.Object 类型?

c++ - 运算符重载为友元函数错误

C++ 列表 Unique() 函数

c++ - 在 Linux 平台上从 Node.js 连接到 DB2

c++ - g++ 抛出 Skeleton wxwidget 项目 "undefined reference to main"错误

c++ - Eratosthenes 实现筛法

c++ - 运算符重载 C++ : write-only version