const限定的内容真的无法修改吗?
关键字const并不能把变量变成常量。在一个符号前加上const限定符只是表示这个符号不能被赋值,也就是它的值对于这个符号来说是只读的,但它并不能防止通过程序的内部(或外部)来修改这个值。
上代码,测试:
#include <stdio.h>
int main(void)
{
const int a = 10; // const 限定
int *pa = &a; // 使用未限定的指针指向a
printf("a = %d; (*pa) = %d\n", a, *pa);
*pa = 20; // 通过指针来修改const限定的值
printf("a = %d; (*pa) = %d\n", a, *pa);
return 0;
}
gcc编译一下(gcc 4.8.2 Ubuntu14.04 64bit)
$ gcc 02.c
02.c: In function ‘main’:
02.c:7:12: warning: initialization discards ‘const’ qualifier from pointer target type [enabled by default]
int *pa = &a; // 使用未限定的指针指向a
编译时出现了警告。
然后执行程序:
$ ./a.out
a = 10; (*pa) = 10
a = 20; (*pa) = 20
被const限定的a的值,通过一个指向它的指针被修改了。