为什么这里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++