常量折叠

  第二次在论坛上看到有人讨论这个问题, 感觉比较有意思, 所以记录一下, 请看下面这段代码:

 

  第一次看到这段代码我感觉如果能够编译过去, 运行不出错的话, &a应该=b, *b应该=20, 至于a的值我只能猜20的可能性比较大一点, 但是在我VS2005运行的结果是:

  

  这个结果就让人大吃一惊了, a, b既然存储在同一地址怎么值确不同呢?

  看了一下网上牛人的说法, 这涉及到一个叫常量折叠的概念(认为我这说得太简单或者不好理解的可以google一下它获取更多信息), 即编译器虽然会给a分配空间, 但是在预编译阶段, 会把所有的a用10替换(这就有点像#define了), 所以虽然&a地址存放的内容改变了, 但是a依然为10.

  这么做的原因是出于对const数据的保护, 防止被破坏性修改, 这个例子也再一次说明指针的灵活性, 大家使用时一点要注意.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值