指针常量
本质是一个常量,意为指针类型的常量
int * const p
解释:const修饰的是p,而p是一个int类型指针,因为p被const修饰了,所以p的值不能被改变,指针p的值即其指向的地址,也就是说,指针p只能指向这个对象,无法改变指向。例:
int a =6,b=7;
int * const p = &a;
p=&b; //错误,指针常量不能改变指向的对象。
*p=7; //正确,指针常量可以改变指向对象的值。
指针常量基本可以等价于引用,都是把指针和指向的对象进行绑定,但为了向前兼容c,所以保留了指针常量,使用上基本是一样的。
常量指针
本质是一个指针,意为指向常量的指针
int const* p;
或
const int* p;
解释:const修饰的是指针p指向的对象,这种定义方式限制了通过这个指针修改变量的值,指针看起来好像指向了一个常量。但这个对象并不是真的常量,可以通过其他途径改变它的值。例:
int a = 5, b=7;
const int* p = &a;
*p=6 //错误,无法通过常量指针p改变p指向对象的值。
a=6; //正确
p=&b //正确,常量指针可以改变指向的对象。