从右往左读就行,p是一个指针to const int
1. 常量指针
const int *p;
int const *p;
常量指针本身是一个指针,指针指向的内容(即*p)不能改变,因而叫常量指针,但指针本身可以修改。可以把常量的地址赋值给常量指针,也可以把变量的地址赋值给常量指针。
const int a=1;
int b = 2;
const int *p = &a;//常量的地址赋值给常量指针
const int *q = &b;//变量的地址赋值给常量指针
p = &b; //正确,常量指针可以修改
*p = b; //错误,常量指针指向的内容不能修改
2. 指针常量
int a = 1;
int *const p = &a; //必须初始化
指针常量本身是一个常量,其类型为指针类型,指针常量必须初始化且不能修改(它是常量),但指针常量指向的内容可以修改。
int a = 1, b = 2;
int *const p = &a;
*p = b; //正确,指针常量指向的内容可以修改
p = &b; //错误,常量不能被修改
3. 常量指针常量
int a = 1;
const int *const p = &a;//常量必须初始化
常量指针常量本身是一个常量,类型为常量指针类型。因为是常量,其必须初始化且不能修改;因为类型为常量指针,其指向的内容也不能修改,是常量指针和指针常量的结合版。
int a = 1, b = 2;
const int *const p = &a;
*p = b; //错误,常量指针指向的内容不能修改
p = &b; //错误,常量不能被修改