您的位置:首页 > 其它

终于体会到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类型,但是值还是被改变了)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐