Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1732508
  • 博文数量: 782
  • 博客积分: 2455
  • 博客等级: 大尉
  • 技术积分: 4140
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-06 21:37
个人简介

Linux ,c/c++, web,前端,php,js

文章分类

全部博文(782)

文章存档

2015年(8)

2014年(28)

2013年(110)

2012年(307)

2011年(329)

分类:

2011-11-08 19:11:38

  1. int main(int argc, char* argv[])
  2. {
  3.      const int a = 10;
  4.      int * p = const_cast<int *>(&a);
  5.      *p = 1;
  6.      printf("%d %d\n", a, *p);
  7.      return 0;
  8. }

求上述程序的输出结果,正确答案是:10 1

分析如下:

首先可以确定是p和&a的地址是指向同一片内存区域的,理论上来说最后的输出结果应该是1 1
但是为什么会输出a的值为10呢? 猜测应该是const关键字的问题,可能编译器看到a为const型变量,所以在编译期就将所有的a直接替换为10了,这个是编译器做的一个优化,

关于volatile关键字

如何避免编译器做这方面的优化呢?
一个常用的方法是将变量a加上关键字volatile,代表是”易变,每次都需要从内存中读取,这样上述程序的运行结果就是1 1了
当然修改常量变量的值不是好的编程习惯,尽量还是少用上述用法

 

阅读(400) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~