首页 新闻 搜索 专区 学院

vs2010下面,看看下面代码输出为什么是这样?

0
悬赏园豆:50 [已解决问题] 解决于 2012-09-23 15:40
void test()
{
    const int a = 7;
    int* b = (int*)&a;
    *b = 21;
    cout << a << endl << *b << endl;
}

有谁能解释一下吗?

问题补充:

const volatile int a = 7; 

要是换成这样就正常了 这是bug?

merlin_q的主页 merlin_q | 初学一级 | 园豆:157
提问于:2012-09-21 15:35
< >
分享
最佳答案
0

之所以会出现该问题是因为高速缓存一致性引起的,请参看这篇文章:http://hi.baidu.com/ximufengsky/item/9a2bdb311b6dfc8ec3cf2952

 

下列测试代码可以供你参考下:

const int a = 7;

int* b = (int*)&a;
*b = 21;

const int* p = &a;
cout
<< *p << endl << *b << endl;

Launcher | 高人七级 |园豆:45045 | 2012-09-21 16:09
其他回答(3)
0

const是一个关键字,它限定一个变量不允许被改变

http://baike.baidu.com/view/1065598.htm

田林九村 | 园豆:2367 (老鸟四级) | 2012-09-21 15:37
0

你要明白 const是什么意思,他是静态的,在编译器就已经固定了,不允许修改

架构师修行之路 | 园豆:322 (菜鸟二级) | 2012-09-21 15:45
0

据说这是编译器优化的。

也就是说, 理论上说你不这么“hack”的话, 那么a永远不会变

因此编译器碰到a的时候, 直接替换成7, 不去取a的值。

收获园豆:50
undefined | 园豆:698 (小虾三级) | 2012-09-21 17:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册