指针常量
重点在常量,const修饰常量(const修饰p,即const p),在const前写指针*,所以指针常量就为:
int * const p
由于const修饰p → 因此p不能改变 → p是一个地址 → 地址不能改变 → 地址的指向不能改变。
由于地址的指向不能改变,因此在声明的时候一定要给它赋初始值。一旦赋值,以后这个常量再也不能指向别的地址。
int a;
int *const p = &a; //在声明的时候就附初始值,之后p的指向不能改变
常量指针
重点在指针,const修饰指针(const 修饰*p,即const *p),所以常量指针为
int const *p 或者
const int *p
const 修饰 *p → 因此 *p不能改变 → *p是指向的内容 → 指针指向的内容不能改变。
虽然指针指向的内容不能通过这个指针来修改,可是仍然可以通过原来的声明修改。
int a = 2014;
const int *c = &a; // 这是合法的,非法的是对c的使用
*c = 2016; // 非法,但可以这样修改c指向的对象的值:a = 2016;
总结:
const 在 * 前面 ,常量指针
*在const前面,指针常量
const修饰什么,什么不可变
const修饰p,p为地址,地址指向不能变
const修饰*p,*p为内容,指针指向的内容不可变