在说常量指针与指针常量之前,先来看一看一个普通指针的使用
int *pa
大家知道pa代表一个指向int类型值的指针.用另一种方式解读为:取pa所指向的地址内的值后,其值类型为int
应该说,编译器只认识的是int型,int*型是不存在的
int *pa 应该看作 int (*pa)
而非 (int*) pa
即(*pa)是一个int型的值
言归正传,套路常量指针与指针常量
下面看常出现的几种形式:
const int *pa;
int const *pa;
int* const pa;
针对以上三种表达方式,现在分析const所修饰的对象,即看其后面的对象。
可以很容易的发现,第一和第二种表达方式const修饰的都是*pa,第三种表达方式const修饰的是pa。
由于*pa代表pa所指向地址中的对象,pa代表的是指针。
可得出结论
const int *pa;
int const *pa;
代表的是*pa的内容为const类型,即指针所指向的地址中的内容是不可变的,我们称其为常量指针(指向常量的指针)。
int *const pa;
代表的是pa指针为const类型,即指针是不能变的,指针内部存放的是其指向的地址,所以该指针只能一直指向同一个地址啦,我们称其为指针常量(指针本身是个常量)。
至于指向常量的常量指针,也可以通过以上规则来分析,一样的道理。
就是这么简单