一、常量指针是指针指向的对象是常量, 即指针变量可以修改, 但是不能通过指针来修改其指向的对象. 例如
int d=1;
const int *p=&d; //const修饰的是int对象, 等效为 int const *p=&d;
*p=2; //编译时报错
二、指针常量是指针本身是个常量, 不能再指向其他对象.
在定义指针时, 如果在指针变量前加一个const修饰符, 就定义了一个指针常量, 即指针值是不能修改的. 例如
int d=1;
int* const p=&d; //const修饰的是指针p, p不能再修改, 但是它指向的内容可以修改, 如*p=2(实际上是将d的值改为2).
三、区分常量指针和指针常量的关键是*的位置, 如果const在*的左边则为常量指针, 如果const在*的右边则为指针常量.
记忆方法: 将*读作指针, 将const读作常量, 例如
定义 int const *p, p是常量指针
定义 int * const p, p是指针常量