const 修饰指针的三种情况
第一种:常量指针
如有以下定义:
int a=20;
int b=10;
const int *p=&a;//常量指针
指针指向的值不可以改的,但是指针的指向可以改。
这样理解:打印 *p时不就是打印a变量的值20嘛?
但是const在你前面把你给锁死了,就如《三体》中的质子把基础物理锁死了一样,人类再做任何挣扎都是无法发生改变的。
p=&b;//指针的指向可以改
*p=20;//如此改变就会出现报错
第二种:指针常量
int * const p1=&b;//指针指向的值可以改的,但是指针的指向不可以改
int* const p1 = 一个地址;因为指针本身的值是不能被修改的所以它必须被初始化
*p1=300;//修改指向的值
p1=&a;// 会出现报错,指针的指向是不可以改的
记忆:* 在前面,顾名思义就是指针常量。
p1就是地址既然被修饰为常量,那肯定不可以改。
const p1 可以理解为只读变量,可读不可改 。
而指针*没有被修饰限定所以是可以改变的。
第三种:既修饰指针又修饰常量
const int* const p2=&a; //既修饰指针又修饰常量,二者都不可以改
p2=&b;//报错
*p2=111;//报错
既修饰指针又修饰常量,二者都不可以改。
总结:看const紧贴指针还是常量,紧贴指针就是常量指针,紧贴常量就是指针常量