首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-28 
同一内存地址上的直为什么不同?//d.cpp:定义控制台应用程序的入口点。//#includestdafx.h #include iost

同一内存地址上的直为什么不同?
//   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,就不要做任何试图修改它的行为,所谓“后果自负”

热点排行