首页 新闻 赞助 找找看

关于C++ const 变量存储位置的问题

0
悬赏园豆:100 [已解决问题] 解决于 2015-06-17 16:46
 1 #include <iostream>
 2 #include<climits>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     const int a = 3;
 9 
10     void* p = NULL;
11     p = (void*)&a;
12 
13     *( (int*)p ) = 1;
14 
15     cout<< "P址:" << p << "值:" << *( (int*)p )
16         << endl
17         << "a址:" << &a << "值:" << a
18         << endl;
19 
20     cin.get();
21 
22     return 0;
23 }

源码如上,运行结果如下:

求教遇到过这种问题的大神,这是什么原理?

隐秘机动部队的主页 隐秘机动部队 | 初学一级 | 园豆:88
提问于:2015-06-17 16:31
< >
分享
最佳答案
1

这个问题是“常量折叠”问题。

定义了P,存储的地址是a的地址,所以p 和 &a 的值是一样的。

*( (int*)p ) = 1;

该操作结束之后,这个地址存储的数据变为了1,

估计您的疑惑是a的值应该也是1.

但是实际上,在编译阶段,编译器就已经将:

cout<< "a址:" << &a << "值:" << a << endl;

转换为

cout<< "a址:" << &a << "值:" << 3<< endl;

这样也就解释了您的问题。

 

详情可以看

http://www.cnblogs.com/wuqi/p/4573028.html

收获园豆:100
依风152 | 菜鸟二级 |园豆:207 | 2015-06-17 16:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册