const变量的副本

作者在 2008-10-16 23:51:05 发布以下内容
    const int ii = 3;
    int *pi = (int *)ⅈ
    *pi = 4;
赋给指针的是const的副本
也就是没有 改变 const的值,只是改变了副本的值

基础知识 | 阅读 4864 次
文章评论,共5条
夜风依旧
2008-10-19 17:16
1
不是什么副本的问题,在编译的时候,在代码段所有用到常量ii = 3的地方 直接将它编译成3 放在指令中做立即数,不是通过地址间接访问的,而实际上ii存储在常量存储区,pi通过地址访问到了ii,并且修改了内容,所以事实上确实常量被篡改了。
vfdff(作者)
2008-10-20 22:16
2
<div class="quote"><span class="q"><b>夜风依旧</b>: 不是什么副本的问题,在编译的时候,在代码段所有用到常量ii = 3的地方 直接将它编译成3 放在指令中做立即数,不是通过地址间接访问的,而实际上ii存储在常量</span></div>被改了?那为什么 ii 仍旧等于 3 ??
夜风依旧
2008-10-20 23:52
3
输出的其实是代码指令中的立即数,根本没有访问数据段数据
夜风依旧
2008-10-20 23:52
4
学了汇编就知道了
vic2008
2008-10-21 12:24
5
都是高手,我一点儿也听不懂!
游客请输入验证码
浏览1936643次