const与volatile

一个例子说明const

const and volatile


const与指针一起使用的情况分析及总结:

        const int nValue; //nValue是const

       int const nValue; // nValue是const

  const char *pContent; //*pContent是const, pContent可变

  const (char *) pContent;//pContent是const,*pContent可变

  char* const pContent; //pContent是const,*pContent可变

  char const * pContent;// *pContent是const, pContent可变

  (char *) const pContent;//pContent是const,*pContent可变

  char* const pContent;// pContent是const,*pContent可变

  char const* const pContent;// pContent和*pContent都是const

        const char* const pContent; //pContent和*pContent都是const

我们可以这样总结:const没有固定的格式用法,它只是个修饰符。在和指针连用时,其实就是声明某个变量为const。若变量pContent和*紧挨在一起,则就被声明为const的为pContent(最后两个例子和这个原则上是一致的)。const char *pContent;还有char const * pContent中,const都是在修饰* pContent。其实,如果我们安静看看代码,这些表达方式是符合人们习惯的。

const int a=1;
int *p;
p=&a;
p=&((int)a);

p=(int *)(&a);

第一个赋值是错误的,这符合我们的预期,编译器给的原因是“error C2440: “=”: 无法从“const int *”转换为“int *””

第二个赋值也是错误的,这个错误出在类型指派上。所谓的指派,会在与a的存储区域不同的地方产生一个新值,这当然是个常量,并且对它去地址是没有意义的。编译器给的原因是“error C2101: 常量上的“&””、“ 无法从“int”转换为“int *””

第三个事可以的。

由此可知,const这个修饰符,修饰的是a,也就是说不能通过a来修改数据,但其实这个变量是可以修改的,就如上边第三个赋值语句所示的方法。

 

volatile有相似的用法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值