指针和const限定符

指针和const限定符之间有两种关系:指向const对象的指针和const指针

这篇文章比较绕,请慢慢看

1.指向const对象的指针

我们经常用指针来修改其指向的对象的值。如果指针指向const对象,则不允许用指针来改变其所指向的const值,为了保证这个特性,C++语言强制要求指向const对象的指针也必须具有const特性:

const double *cptr;

这里的cptr是一个指向double类型const对象的指针,const限定了cptr指针所指向的对象类型而非cptr本身。也就是说cptr本身不是const的。在定义是不用对他进行初始化,如果需要的话,允许给cptr重新赋值,使其指向一个const对象。但是不能通过cptr修改其所指向对象的值。

把一个const对象的地址赋值给一个普通的、非const对象的指针也会导致编译错误。

但是允许把非const对象的地址赋给指向const对象的指针。但是在这中情况下还是不能够修改指针所指向的对象的。

不使用指向const对象的指针修改基础对象,然而如果该指针指向的是一个非const对象,可用其他方法修改其所指向的对象。本质上来说,由于没有办法分辨cptr所指向的对象是否为const,系统会把它所指向的所有对象都视为const。

如果指向const的指针所指向的对象宾根娥const,则可直接给该对象赋值或间接地利用普通的非const指针修改其值:毕竟这个值不是const。重要的是要记住:不能保证指向const的指针所指向的对象的值一定不能被 修改。

在实际的程序中指向const的指针常用作函数的形参。将形参定义为指向const的指针,以此确保传递给函数的实际对象在函数中不因为形参而被修改。


2.const指针

除了指向const对象的指针以外,C++还提供了const指针-----本身的值不饿能耐被修改。

int number=0;

int *const  curNumber=&number;

我们可以从右向左吧上述定义的语句读作指向int型对象的const指针。与其他const量一样,const指针的值不能修改,这就意味着不能再使用这个指针指向其他对象。

与任何const对象一样。const指针也必须在定义时被初始化。

const指针是可以通过指针本身修改去指向的对象的,当然,实在这个对象可以被修改的情况下。


3.指向const对象的const指针

这种情况既不能修改数据也不能修改指针。


4.指针和typedef

假设给出一下语句:

typedef string *pstring;

const pstring cstr;

const pstring指针代表的真实类型是:

string *const cstr;他的本质是一个const指针指向strring类型而不是一个指向double const类型的指针。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值