常量指针(T *const p):
本质是指针。必须初始化,而且一旦初始化完成,则它的值(也就是存放在指针中的那个地址)就不能再改变了。可以通过指针修改所指向对象的值。
指针常量(const T *P):
本质是常量。既然是常量,就无法通过指针修改指向变量的值。但可以重新绑定对象。可以指向常量,也可以指向非常量(指针常量只是自我以为指向对象的值不可改变,于是则约束自己不能通过自己改变对象的值,实际上对象本身的值也是可以改变得)。
int a = 123;
int b = 456;
//指针常量
const int *p = &a;
//常量指针
int *const q = &a;
p = 3;//错误:无法通过指针修改指向对象的值
q = 3;//正确
p = &b;//正确
q = &b;//错误:无法重新指向另一对象