关于const变量的一点理解

无意间看到一题目 是关于const变量的。代如下

 

 问题是:

pCInt = &LENGTH,

然而后面的输出是1 2

为什么?

 

一步一步分析,const int *pCInt = & LENGTH;

pCInt 为指向LENGTH地址的值,且为常量。

(int) *pCInt = 2; 实际上等同 const_cast<int>(*pCInt) = 2;

去掉变量的常量属性再赋值。也就是改变了 pCInt 指向的地址的值为2.

即然值为2,那么LENGTH中内存的值也为2,为什么会输出1呢?是不是编译器做了

什么处理?(我当时给出的回答就是编译器做出了处理,具体是什么不清楚)

后来仔细想了下,可能是符号替换,不知道对不。

 

下面用汇编代码来验证我们的想法。

(为了看得清楚,把cout改成printf了) 

 

从printf("%d/n",LENGTH);

00401056  push        1   

可以看出,编译器是做的符号替换,就是在编译的时候遇到LENGHT直接替换为1

 

printf("%d/n",*pCInt);

00401065  mov         eax,dword ptr [pCInt] 

00401068  mov         ecx,dword ptr [eax] 

 

遇到*pCInt是直接从内存中去取值。

 

 

总结如下:

 1.变量本身的类型最好不要去改变,除非必要。

 2.要明确cosnt的意义,什么时候该用,什么时候不该用,这是基本功。

 3.理解符号替换,就相当于宏定义

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值