const指针与指向const对象的指针

一. 指向const对象的指针:
定义形式:const double *cptr;
const限定了指针指向的对象类型,指针本身不是const类型
特征:
1.不能通过指针改变const对象的值,但是可以修改指针cptr指向的地址

*cptr =42;  //error:*cptr may point to a double that is const
2. 允许把非const对象的地址赋给指向const对象的指针;不能把一个const对象的地址赋给一个普通的、非const对象的指针
const double pi=3.14;
double *ptr = &pi		//error:ptr is a plain pointer
const double *cptr = &pi	//ok:cptr is a pointer to const
3.不能使用void *指针保存const对象的地址,但是可以用const void*指针保存const对象的地址
const int universe =42;
const void *cpv = &universe;	//ok:cpv is const
void *pv = &universe;			//error:universe is const 
4.有时候指向const对象的指针cptr实际上指向的是非const对象的地址,但仍然不能用指针cptr来修改该对象的值,因为系统会把它指向的对象都视为const。 要修改该对象的值可以给该对象赋值或间接利用普通的指针(指向非const对象的指针)修改,因为其并不是const  

小提示:指向const对象的指针也有可能指向非const对象,故不能保证指向const的指针所指的对象值不被修改(参考第4点)

二.const指针是一种指针,此指针指向的地址是不能够改变的,但是其指向的对象是可以被修改的,其定义类似

int errNumb=0;
int *const curErr = &errNumb;		//curErr is const
特征:
1. 任何企图给const指针赋值的行为都会导致编译出错
curErr = curErr;	//error:curErr is const
2. 指针指向对象的值是否能修改取决于对象自身的类型,如本例中curErr指向一个普通的非常量int型对象,则可用curErr修改该对象的值
if(*curErr){
	 errorHandler();
	 *curErr = 0;	//ok:reset value of the object to which curErr is bound
 }


三.    指向const对象的const指针
 定义形式:
const double pi = 3.14159;
 const double *const pi_ptr =&pi
由右向左阅读上述语句,*const pi_ptr是一个const指针,const double 表明指针指向的是一个double 类型的const对象

特征:首先const指针不能修改const指向对象的地址,const指针指向的对象为const,故也不能修改对象的值




关于const指针和指向const对象的指针也可参考:http://blog.csdn.net/tobacco5648/article/details/8530975   


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值