终于体会到C中Volatile的重要性了

在C语言中,volatile的作用是防止编译器对变量的访问进行编译优化,使得每次访问变量时都必须到原始变量的
内存地址上取值。来看下面的一个例子(这个例子也说明了const 修饰的变量的值其实也是可以改变的),
编译环境VS2010
int main()
{
const int n = 10;
int  *p = (int *)&n;
*p = 15;
printf("%d\n",&n);
printf("%d\n",p);
printf("%d\n",n);
printf("%d\n",*p);
        return 0;
}
编译运行输出以下结果
 图片
在这里大家可以看到,&n和p完全是同一个地址,但是n的值是10而*p的值确实15,显然这里出现了编译优化,
在输出n的值 得时候并没有到n的内存地址上取值
 
在定义n时前面加上volatile再试一下
  int main()
{
volatile const int n = 10;
int  *p = (int *)&n;
*p = 15;
printf("%d\n",&n);
printf("%d\n",p);
printf("%d\n",n);
printf("%d\n",*p);
return 0;
}
编译运行输出以下结果:
 图片
在这里,n和*p的值是一样的了(n是const类型,但是值还是被改变了)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值