读书人

同一内存地址上的直为什么不同?该怎么

发布时间: 2012-03-28 15:40:03 作者: rapoo

同一内存地址上的直为什么不同?
// d.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h "
#include <iostream>

using namespace std;



main()
{

const int a=2293616;

int *p=const_cast <int*> (&a);
*p=3;
cout < < "p= " < <p < < " *p= " < <*p;
cout < < "\n&a= " < <&a < < " a= " < <a;;

system( "pause ");
}

打印结果:
p=0012FED4 *p=3
&a=0012FED4 a=2293616

为什么
内存地址一样 但上面存放的值不一样 汗~~~~~~

[解决办法]
const int a=2293616;

编译时凡用a的地方,直接是立即数2293616
如果你要取a的地址,它又分配一个地方初始化为2293616.你修改了这个地方,但修改不到程序用a的地方.
[解决办法]
常量折叠
[解决办法]
这是一种优化,
在编译后,
程序中 a 直接被替换为 2293616,
而 p 是访问内存取值获得的,
由于赋值过程的存在,
自然就不一样了 ~
[解决办法]
既然是定义成const,就不要做任何试图修改它的行为,所谓“后果自负”

读书人网 >C++

热点推荐