1、常量指针(const int * p1,const修饰的是指针)
指针指向可更改,指针指向的值不可更改。const 修饰 int *,即指向的那个内存区域,故使用该指针不可改变那个内存区域的值,但是那个内存区域本身可以改变。
int a = 10, b = 20;
const int * p1 = &a;
p1 = &b; // 指针指向可以更改,但是指针指向的值不可更改
//*p1 = 100 //错误
2、指针常量(int * const p,const修饰的是常量)
指针指向不可更改,指针指向的值可以更改。const 修饰指针 p,所以p不可以指向别的内存区域。
int a = 10, b = 20;
int * const p2 = &a;
//p2 = &b; //错误
*p2 = 100; //指针指向不可更改,指针指向的值可以更改
3、指向常量的常量指针(const int * const p3,const既修饰指针又修饰常量)
指针指向不可更改,指针指向的值也不可更改
const int * const p3 = &a;
//p3 = &b; //错误,指针指向不可更改
//*p3 = 100; // 错误,指针指向的值也不可更改
总结:可将 const 读作变量,* 读作指针,谁在前先读谁;同时,对于常量指针和指针常量,谁在前谁不可改变。