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

论坛 期权论坛 脚本     
匿名技术用户   2021-1-9 11:07   11   0

一. 指向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 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP