注意
当const遇上指针,其实很好理解,不要被中文的翻译给混淆了,还是看英文原话比较好理解。
1、指针指向某类型值,不希望该指针有机会去修改该值时,使用const int *(同 int const *),指向的值可以是常量,也可以是变量。【可以变更指向的对象】
2、指针指向某类型值,不希望中途更换该指针所指向的对象,使用int * const,此时指向的是个变量(可以修改该变量的值),注意,不能指向常量噢。【可以修改变量的值】
把1、2两条合并起来,意思是:指针指向某类型的值,不希望该指针有机会去修改该值,也不希望该指针中途更换所指向的对象,使用const int * const(同 int const * const)。可以指向常量,也可以指向变量,但是不能变更指向的对象,也不能修改所指向的对象的值。
const int coco = 1234;
int const other = 888; // 同 const int
int normal = 33;
int normal2 = 44;
const int * pt = &coco;
pt = &other;
pt = &normal;
//*pt = -1; // sorry, pt是个指向变量(可以是常量)的指针,可以改变指向的对象,但是不能改变所指向的对象的值
int const * pt2 = &coco; // 同 const int *
pt2 = &normal;
pt2 = &other;
//*pt2 = 825232603; // sorry, pt2跟pt是一个道理
int* const pt3 = &normal;
*pt3 = 33;
//pt3 = &normal2; // sorry, pt3此时是个始终指向某个int变量的指针,不可切换指向对象
//pt3 = &other; // sorry, pt3此时是个始终指向某个int变量的指针,不可切换指向对象
const int* const pt4 = &coco;
//pt4 = &normal2; // sorry, 第二个const发挥作用, 不可切换指向对象
//pt4 = &coco; // sorry, 第二个const发挥作用, 不可切换指向对象
//*pt4 = 33; // sorry, 第一个const发挥作用, 不能修改值
int const* const pt5 = &normal; // 同 const int * const
//pt5 = &normal; // sorry
//pt5 = &coco; // sorry
//*pt5 = 33; // sorry