但是这里需要注意的是,上面第 1 种情况中,虽然在 *p 前加上 const 可以禁止指针变量 p 修改变量 a 中的值,但是它只能“禁止指针变量 p 修改”。也就是说,它只能保证在使用指针变量 p 时,p 不能修改 a 中的值。但是我并没有说 const 可以保护 a 禁止一切的修改,其他指向 a 的没有用 const 修饰的指针变量照样可以修改 a 的值,而且变量 a 自己也可以修改自己的值。下面写一个程序看一下:
# include <stdio.h>
int main(void)
{
int a = 10;
const int *p = &a;
int * q = &a;
*q = 20;
printf("a = %d\n", a);
a = 30;
printf("a = %d\n", a);
//*p = 30; //这么写就是错的
return 0;
}
输出结果是:
a = 20
a = 30
可见,只有用 const 修饰过的指针变量 p 不能修改 a 中的内容,而没有用 const 修饰过的指针变量 q 照样可以修改 a 中的内容,而且 a 自己也可以重新给自己赋值。