c const 关键字疑问

const int a = 3;
int* p = (int *)&a;

*p = 4;

printf("a-------%d------\n", a);
printf("*p-------%d------\n", *p);
printf("&a-------%d------\n", (int)&a);
printf("p-------%d------\n", (int)p);

输出:

a-------3------
*p-------4------
&a-------1606416268------
p-------1606416268------

问题是 const 修饰a变量后,a 不能修改,但是可以隐式修改a 的值,就是用指针。 我用指针修改了值,为什么输出的时候 a 没有改变。*p 的值改变了。

阅读 2.8k
5 个回答

因为这本身就是ub,你这么做究竟能导致什么结果,编译器是不会给你保证的。

a应该是被你的编译器优化成一个常数量3了。

我用gcc 5.4.0用默认参数编译,结果就是a=4的输出。

我在ubuntu gcc 4.8.4下,输出的a = 4

新手上路,请多包涵

gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)下 a = 4

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进