C++学习之指针和const限定符

今天看了《C++ Primer》4.2.5节“指针和const限定符”。觉得理解起来像绕口令似的,好不容易捋顺一遍,一做题,又乱了。做

点笔记,供参考。

1、指向const对象的指针
 (1)我们可以用指针来修改其所指对象的值。
 (2)如果,某指针指向const对象,则不允许用指针来改变其所指的const值。
 (3)C++为保证这个特性,强制要求指向const对象的指针也必须具有const特性。
 example:
 const double *cptr;
 (1)这里,cptr是一个指向double类型const对象的指针。
 (2)const限定了cptr指针所指向的对象,而并非cptr本身。即cptr本身并不是const类型。在定义时不需要对它进行初

始化,允许给cptr重新赋值,使其指向另一个const对象。
 (3)不能通过cptr修改其所指对象的值。
 注意1:把一个const对象的地址赋给一个普通的、非const对象的指针也会导致编译时的错误。
 example:
 const double pi=3.14;
 double *ptr=π  //error:ptr is a plain pointer
 const double *cptr=π  //ok:cptr is a pointer to const
 注意2:不能使用void*指针保存const对象的地址,而必须使用 const void*类型的指针保存const对象的地址。
 example:
 const int universe=42;
 const void *cpv=&universe;  //ok:cpv is const
 void *pv=&universe;     //error:universe is const
 注意3:允许把非const对象的地址赋给指向const对象的指针
 example:
 double dval=3.14; //dval is a double ;its value can be changed
 cptr=&dval;    //ok:but can not change dval through cptr
 尽管dval不是const对象,但任何企图通过指针cptr修改其值的行为都会导致编译时错误。cptr一经定义,就不允许修改

其所指向对象的值。
2、const指针
 const指针---本身的值不能修改。
 int errNumb=0;
 int *const curErr=&errNumb;  //curErr is a constant pointer
 注:curErr是指向int型对象的const指针。与其他const量一样,const指针的值不能修改,这就意味着不能使curErr指

向其他对象。
 与任何const量一样,const指针也必须在定义时初始化。
 指针本身是const的事实--并没有说明--是否能使用该指针修改它所指向对象的值。指针所指对象的值能否修改完全取决

于该对象的类型。
3、指向const对象的const指针
 example:
 const double pi=3.14;
 const double *const pi_ptr=π
 本例子中,既不能修改pi_ptr所指向对象的值,也不能修改该指针的指向(即pi_ptr中存放的地址值)。
 pi_ptr首先是一个const指针,指向double类型的const对象。
4、指针和typedef
 typedef string *pstring;
 cosnt pstring cstr;
 问:cstr变量是什么类型?
 答:把cstr定义为指向string类型对象的const指针
 这个定义等价于string *const cstr;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值