关与“const”的小问题。

shishiXP 2003-04-15 12:50:26
#include <iostream.h>
void main()
{
const int a=9;
int *p=(int *)&a;
*p=0;
cout<<a<<endl;
cout<<*p<<endl;
cout<<&a<<" "<<p;
}
结果: 9
0
地址一样
怎么会有2个值?

...全文
137 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu_feng_fly 2003-04-15
  • 打赏
  • 举报
回复
const int a=9;
会被编译器进行优化,在编译的时候把所有用到a的地方直接用9代替来提高效率
shishiXP 2003-04-15
  • 打赏
  • 举报
回复
多谢各位。


//////////end/////////////////
shishiXP 2003-04-15
  • 打赏
  • 举报
回复
对于(小东)的观点:
那&a的值怎么会和p一样呢?
Frank001 2003-04-15
  • 打赏
  • 举报
回复

http://expert.csdn.net/Expert/topic/1487/1487272.xml?temp=.0708887
shishiXP 2003-04-15
  • 打赏
  • 举报
回复
有些明白了。

但是:int *p=(int *)&a 难道变成了 int *p=(int *)&9 ?那不就不对了吗?
aitforever 2003-04-15
  • 打赏
  • 举报
回复
同意: liu_feng_fly(笑看风云 搏击苍穹 衔日月)
chenxd31 2003-04-15
  • 打赏
  • 举报
回复
我的个人理解:
C++中对于const变量在编译期间一般不分配地址,const变量的值存在于符号表中。程序中int *p=(int *)&a;强迫编译器分配地址,但a的值并非存储在该地址空间中。该地址内存储的真正值由*p=0;决定。故出现你看到的结果。顺便说一句,将const变量地址赋给非const指针,容易引起错误。
kunp 2003-04-15
  • 打赏
  • 举报
回复
o,up
zhpsam109 2003-04-15
  • 打赏
  • 举报
回复
cout<<a<<endl;输出9
cout<<*p<<endl;输出0

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧