众所周知,我们平时若要定义一个常量,使其不能修改,可以用 const 类型 标识名,这样的话这个变量的值就不能修改了。
像上面这种对a赋值的做法就是错误的了。
同理,指针常量和指向常量的指针也就不难理解了。
指针常量
顾名思义,“指针常量”便是我们定义的指针是一个常量,其指向不可修改,也就只能在定义时对其进行初始化操作。如下:
虽然上面指针a的指向不能变,但我们可以通过间址操作改变a指向的值(也就是m的值)
另外,下面的这种初始化是错误的,因为虽然限定指针p的指向不可变,但对p进行间址操作(p)赋值也是可以的,但我们事先声明max为不可变的整型变量,所以我们对p赋值实质上是在改变max的值,上下不符合,所以会报错!
指向常量的指针
如果我们想定义一个指针,它指向一个不可变的常量,但是它的地址可变,我们就用到了“指向常量的指针”。
我们可以“肆无忌惮”的对p赋值,但我们绝不能通过p去改变p指向的地址的值,因为p只可读,不可写。
此外,定义指向常量的指针时有两种方式: const 类型 指针 or 类型 const 指针
tips:关于指向常量的指针与指针常量,如果感觉难理解,可以通过看const的位置来记忆。例如“const int* p” const后面有*,也就是p只可读,“int const p”后面是p,即指针p只可读。
最后再来一句我自己的领悟(如果不对,还请指正):定义指针和引用时,如果指向的或引用的值为常量(const),那么对指针的间址操作和对引用 进行赋值绝对不行,也就是说至少是指向常量的指针or常引用。
如果指向或引用的值为变量,那么,请随意~