Chinaunix

标题: 同一个地址可以存放两个值吗? [打印本页]

作者: maverick_zhang    时间: 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

请高手解释一下。同一地址会有两个值,还是编译器又另外开辟了临时存储单元。
作者: maverick_zhang    时间: 2005-07-07 10:12
标题: 同一个地址可以存放两个值吗?
是否会跟const int 和局部int存放的区域,有关。
局部int是存放在栈中,那么const int呢?但它们的地址是一样的啊
还想问一点,编译器将文字常量,例如字符串“fdfdfdf”,放在哪个区域呢?
作者: 菜青虫    时间: 2005-07-07 14:56
标题: 同一个地址可以存放两个值吗?
我也试过了,程序结果的确如你输出的所写。但是我觉得这个应该是跟编译器优化有关,你在程序中调用value的地方,编译器应该会直接用value的值替换掉变量,所以虽然调用的地方value的值变了,但是由于实际编译的代码可能已经变成<<"value = "<<12345<<endl,所以给人感觉上还是原来的值。
当然我的说法不一定正确,只是我的猜测。因为我在调试状态下看到的value的值的确已经被改变了。
不过建议不要采用这种代码。

刚才查看了一下汇编的代码,证实了我上面的想法。嘿嘿
作者: maverick_zhang    时间: 2005-07-08 10:18
标题: 同一个地址可以存放两个值吗?
我写这个程序的意思是想通过强制转换改常量。我知道常量的值是改不了的,只是好奇会发生什么样的结果。呵呵,谢谢楼上的解答,还是要再研究研究。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2