免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1297 | 回复: 3
打印 上一主题 下一主题

同一个地址可以存放两个值吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-07 09:52 |只看该作者 |倒序浏览
const int value = 12345;
int *new_value = const_cast<int*>;(&value);
*new_value = 10;
cout<<"the address of value is"<<&value<<endl
    <<"the newvalue is "<<new_value<<endl
    <<"value = "<<value<<endl
    <<"the content of newvalue is "<<*new_value<<endl;

我用DEV_C++编译,运行,结果是:
the address of value is 0x241ff5c
the newvalue is 0x241ff5c
value = 12345
the content of newvalue is 10

请高手解释一下。同一地址会有两个值,还是编译器又另外开辟了临时存储单元。

论坛徽章:
0
2 [报告]
发表于 2005-07-07 10:12 |只看该作者

同一个地址可以存放两个值吗?

是否会跟const int 和局部int存放的区域,有关。
局部int是存放在栈中,那么const int呢?但它们的地址是一样的啊
还想问一点,编译器将文字常量,例如字符串“fdfdfdf”,放在哪个区域呢?

论坛徽章:
0
3 [报告]
发表于 2005-07-07 14:56 |只看该作者

同一个地址可以存放两个值吗?

我也试过了,程序结果的确如你输出的所写。但是我觉得这个应该是跟编译器优化有关,你在程序中调用value的地方,编译器应该会直接用value的值替换掉变量,所以虽然调用的地方value的值变了,但是由于实际编译的代码可能已经变成<<"value = "<<12345<<endl,所以给人感觉上还是原来的值。
当然我的说法不一定正确,只是我的猜测。因为我在调试状态下看到的value的值的确已经被改变了。
不过建议不要采用这种代码。

刚才查看了一下汇编的代码,证实了我上面的想法。嘿嘿

论坛徽章:
0
4 [报告]
发表于 2005-07-08 10:18 |只看该作者

同一个地址可以存放两个值吗?

我写这个程序的意思是想通过强制转换改常量。我知道常量的值是改不了的,只是好奇会发生什么样的结果。呵呵,谢谢楼上的解答,还是要再研究研究。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP