c const 关键字疑问 财富值16

2016-10-29 13:58发布

2381 6 4
const int a = 3; int* p = (int *)&a;  *p = 4;  printf("a-------%d------
", a); printf("*p-------%d------
", *p); printf("&a-------%d------
", (int)&a); printf("p-------%d------
", (int)p); 

输出:

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

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

自定义标题
段落格式
字体
字号
代码语言
6条回答

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

52人赞 添加讨论(1) 举报

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

75人赞 添加讨论(0)举报

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

59人赞 添加讨论(0)举报

看到过这个问题,给个链接:http://www.zhihu.com/question...

45人赞 添加讨论(0)举报

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

44人赞 添加讨论(0)举报

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

29人赞 添加讨论(0)举报

一周热门 更多>