const和volatile变量是否可以同时修饰一个变量

问题:const和volatile是否可以同时修饰一个变量?有什么含义?

答案:如果一个变量不会被本程序改变,通常可能给它加上const,但如果该变量可能被其他程序改变而本程序又在检测这个变量的值,就需要给它加上volatile,于是变量就同时有volatile和const了,这个时候i具有const和volatile的双重属性。i变量不可以在编译过程中被程序代码修改,同时编译器不得对i进行优化编译。

例如

硬件时钟一般设定为不能由程序改变,这一点使它成为const;但它被程序以外的代理改变,这使它成为volatile的。只需在声明中同时使用这两个限定词,如下所示:

顺序并不重要:

volatile const int loc;

const volatile int*ploc;

假定没有被修改,告诉编译器可以被代理修改。

 const和volatile是可以同时修饰一个变量的  const只是表示变量只读 不能出现在赋值号左边  防止程序“意外”修改   并且编译器一定会做优化 不会每次去内存取值 这个时候如果外部事件 如中断服务程序 改了这个变量的内存值  那么由于编译器优化就不会出有反应 这样会导致错误 加上volatile就告诉编译器 不要做任何优化  并且每次都去内存取值  而且这个变量不可以当左值使用 .

 例如:求平方的函数

int square(volatile int *ptr)   
{  
      return *ptr * *ptr;  
}  

 
   此处用volatile就显得画蛇添足了.
1.因为在求平方的时候 ,确实很可能外部改变了内存值 ,导致第一次取的值*ptr和第二次取的不一样的. 导致结果不是平方  
2.返回值,即平方会很大 ,所以返回值用 unsigned long为好.


unsigned long square(int a)  
{  
       return a * a;  
} 





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值