const限定的内容真的无法修改吗?
关键字const并不能把变量变成常量。在一个符号前加上const限定符只是表示这个符号不能被赋值,也就是它的值对于这个符号来说是只读的,但它并不能防止通过程序的内部(或外部)来修改这个值。
上代码,测试:
#includeint 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.c02.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) = 10a = 20; (*pa) = 20
被const限定的a的值,通过一个指向它的指针被修改了。