C++指针常量与常量指针
指针常量
const int m = 3; //m是一个常量,不能被改变
int n = 10;
int *p = &m; //错误,p是一个普通指针,不能指向常量m
const int *p1 = &m ; //正确,因为p1是常量指针,可以指向常量与非常量
p1 = &n; //正确,但是不能通过*p1更改n的值,只能存放n的地址
//还有一点是指针类型必须和所指对象类型一致
常量指针:必须被初始化,而且一旦初始化完成,则它的值(存放的地址)不可被改变
int m = 10;
int n = 2;
int *const p = &m; //正确
p = &n; //错误,因为p被const修饰,是一个常量,存放的是m的地址,不允许被更改
*p = 3; //正确,因为*P没被const修饰,所以可以更改,此时m的值被更改为3
const int m = 10;
int *const p = &m; //错误
const int *const q = &m; //正确,q是一个指向常量对象的常量指针
符合类型从右向左读,从变量名称最近的地方开始解读符号和关键字对其的影响,如int *const p,关键字const只修饰了p,也就是说p是一个常量对象,在前边是一个 * 表示p是常量指针,最后是int表示是什么类型的
指针本身是一个常量但并不意味着不能通过指针修改所指对象的值,能否这样做还取决于所指对象的类型
以上是从c++ prime一书中得到,可能与其他有所差别,仅供参考,欢迎各位大佬指出错误与不当之处