在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的内存地址上取值
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类型,但是值还是被改变了) |
终于体会到C中Volatile的重要性了
最新推荐文章于 2024-12-01 23:53:54 发布