一、指向常量的指针
先看例子
-
// pointer to const
-
-
const double pi=3.14;
-
-
//double *ptr=π // 错误:ptr是普通指针
-
-
const double *cprt=π
-
-
//*cptr=44; // 错误:不能通过*cptr赋值
-
-
const double ln=2.43;
-
-
cprt=&ln;
-
-
// *cptr=44; // 错误:不能通过*cptr赋值
-
-
double dval=2.43;
-
-
cprt=&dval; // 可以 重新设置指针的地址
第三行代码 const double *cprt 按照从右向左解读,*cptr是一个指针,指针的类型是double,并且该变量是
const ,指针常量仅仅要求不能通过该指针改变对象的值。
二、常量指针
老规矩先看例子
-
//const pointer
-
int errNumber=0,abc;
-
-
int *const curErr=&errNumber;
-
-
*curErr=1; //可以通过常量指针修改值(修改内容为非常量)
-
-
//curErr=&abc; //不可以修改常量指针的地址内容
-
-
const double *const pip=π
-
-
//*pip=3; //pip常量指针指向的内容为常量,不可以修改
int *const curErr=&errNumber; 按照从右向左解读,常量指针。不变的是指针本身的值,而非指向的那个值。常量指针在初始化完成后,那个地址就不能改变了。
三、顶层const
两个概念,指针所指是不是一个常量,指针本身是不是常量:
1、
用底层const(low-level const)表示:指针所指向的对象是一个常量。(指针常量 *变量),仅仅要求不能通过该指针改变对象的值
2、
用顶层const(top-level const) 表示:指针本身是一个常量 。(常量指针 *const),指针的值(地址)不可以修改
先看例子
-
int i;
-
-
int *const p1=&i; //不能改变p1的值(地址),这是一个顶层const
-
-
const int ci=42; //不能改变ci的值(地址),这是一个顶层const
-
-
const int *p2=&ci; //允许修改p2的值(地址),这是一个底层的const
-
-
const int *const p3=p2; //靠右的是顶层const ,靠左的是底层const
-
-
const int &r=ci; //引用的const 都是底层const
-
阅读(200) | 评论(0) | 转发(0) |