终于体会到C中Volatile的重要性了
2014-03-18 21:36
225 查看
在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类型,但是值还是被改变了) |
相关文章推荐
- 终于体会到数学对于程序员的魅力
- 终于体会OpenCV的好处了
- 持续一年之久的项目终于结项啦!总结一下这一年来的心得体会!
- C语言关键字”volatile”的意义(或重要性)
- 从节操播放器的基本使用--来体会github的重要性
- 玩互联网心得体会:创业阶段选择的重要性有舍才有得
- 终于发现了框架的重要性
- 终于体会到了,在.net开发不用C#那纯粹是自找麻烦阿
- 体会到软件测试的重要性
- 我终于也碰到volatile这个问题了
- 经过多次强攻之后,赫柏带领的军团不仅没能击败鲁卡斯,反而被鲁卡斯打得七零八落,赫柏终于体会到了高阶天之驱逐者的强大实力。 不过,赫柏最终还是找到了鲁卡斯的致命弱点,他发现鲁卡斯喜欢收集上古卷轴,因为上古卷轴能够让鲁卡斯获得神秘之力。 卢卡斯决定使用上古卷轴将卢卡斯引诱到绝域之门,利用绝域之门的力量消灭卢卡斯。 赫柏注意到卢卡斯喜欢收集不同的卷轴,如果总是捡到相同的上古卷轴,它的兴趣就会逐渐降低。
- 终于体会到什么叫企业级开发!...-_-|||
- 终于赚了100元——记第一次虚拟炒股 + 搜狗拼音使用体会
- 终于被 volatile “暗算”了一把
- 今天经过一场深有体会的谈话-终于决定了我2012的方向
- (*(volatile unsigned long *)心得体会
- 今天终于体会到了……
- 今天经过一场深有体会的谈话-终于决定了我2012的方向
- 创造最大效率,团队成员的重要性【成长】【体会】
- 今天终于体会到关键地方为什么用汇编的好处了。