const修饰指针有三种情况:
1、const修饰指针——常量指针;
2、const修饰常量——指针常量;
3、const既修饰指针又修饰常量;
常量指针
e.g. const int *p = &a;
特点:指针的指向可以修改,但是指针指向的值不可以改。
const int *p=&a;
*p = 20; //错误,p指向的内存中的值不能修改
p = &b; //正确,p可以改变指向
指针常量
e.g. int * const p =&a;
const后面跟着变量,那么表示p是个常量。其特点是指针的指向不可以改,但是指针指向的值可以改。
int * const p=&a;
*p = 20; //正确,p指向的值可以修改
p = &b; //错误,p不可以改变指向
const又修饰指针,又修饰变量
e.g. const int * const p =&a;
特点:指针的指向和指针指向的值都不可以修改。
按照从右往左的规则分辨,对于第二种const先修饰p,那么表示p无法更改,p是一个地址,所以指针不能乱指。对于第一种,const修饰 *p,*p是指针指向的值,所以这个值是不能改的,但是指针的指向是可以改的。