1. int const*
从右往左看,进行解析,这个p是个指针,而且是个常量,类型是整型。可称为指针常量
特点:*p指向一个整型的常量,但是不能通过修改p所指向内存单元的值,只能修改所指向的对象,或者通过改该对象的值。
such as:
int a = 10;
int b = 20;
int c = 55;
int const *p = &a;
const int *q = &b; //与上面一样
p=&c; //可以通过,允许修改所指向的对象
q=&a;
*p=34; //不允许通过,无法通过该指针修改内容
*q=123;
//同上
p=q;
//可以通过
p=&a; //重新指向a,通以修改a的值,修改p中的值
a=456;
2. int * const p
从右往左看,一个常量p被定义为整型指针。可称为常量指针
特点:常量p是一个整型类型的指针,它能通过指针来进行修改其中的内容,但当它已经指向一个地址之后,便不能再指向其他地址,和int const*有区别
int b = 20;
int c = 55;
int * const p = &a;
int *const q = &b;
*p=34; //可以将p所指向的地址进行修改
a=894; //也可以通过修改a的值,使p的值进行更改
p=&c; //该操作不被允许,已经指向一个地址,无法指向其他地址
p=q; //该操作也不被允许,除非p还没进行初始化
结合上面两个,可以看做常量指针常量,即常量p是一个整型的指针,而且这个指针还是个常量
特点:结合上面两个,将两个都不能允许的操作,在这也全部不允许——不允许当p初始化后,再将p指向其他地址;不允许通过修改指针p的值
int a = 10;
int b = 20;
int c = 55;
const int* const p = &a;
const int* const q = &b;
*p=456; //该操作不被允许
p=&c; //该操作不被允许
a=333; //允许该操作,进行修改值
const int* const r=p; //允许该操作