为什么常量指针的值可以改变?

img

为什么这里a可以从abc改为abd啊?
常量指针的值不是不能修改吗?

这只是说 a 指向的 字符串是 没法修改的, 而不是说 指针a 不能指向 另外的字符串
简单理解就是 它指向的字符串常量是没法修改的,但它本身的指向还是可以修改的

const char *a = "abc";
*a = 'd'; // 这样使用就是有问题的

const char* a 的意思是, a指向的那个地址的内容不能修改, 但a本身的值可以修改, 也就是可以通过修改a的值, 指向别的地址.

const char* a定义的是一个常量指针,它的内容是不允许修改的,你执行a[0]='a'就会报错
而char* const a定义了一个指针常量,a的地址不允许修改,不可以给a重新赋值

const char* a =》a是一个指针,你的const修饰的是char*,所以他是一个指针,指向的是一个常量char区域内存,所以不能被修改的是常量char区域的内存,因此你如果通过a指针修改a指针指向的内存值,是不可以的,比如你这样:

 char str[] = "hello world";
    const char* p = str; 
    p[0] = '2';

那么你说的常量指针如何不让他被修改呢?有办法,你用char* const a .

char str[] = "hello world";
    char str2[] = "no bug";
    char* const p = str;
    p[0] = '2';//可以被修改,p是一个真正的常指针,一旦指向str,就不能指向其他内存了,但可以修改指针指向的值
    p = str2;  //不可以被修改,p是一个常指针,一旦指向str,就不能指向其他内存了
```c++