有常量约束的指针可分为两种, 一种是常量指针,另一种是指向常量的指针
- 常量指针如下:
int a = 1;
int * const b = &a
此时b只能指向a的地址, 不能指向其他地址了, 但是*b的内容可以改变
[技巧]: 识别const作用的时候把类型去掉,形成 * const b, 再看const修饰的是什么, 这里修饰的是b, 因为b是一个指针, 所以b的内容不能改变就是不能指向其他地方.
- 指向常量的指针如下:
int a = 1;
const int * b = &a;
此时*b 可以指向其他地方, 但是通过 *b 不能改变 &a中的值了, 但是通过a可以改变 &a 中的值. 所以引用一句《C++ Primer》的话:“指向常量的指针”实际上是“自以为指向常量的指针”。(见中文第四版P110)
[技巧]: 去掉类型标识符, 剩下 const * b, 那么const修饰的是 *b, 也就是说*b的内容不能改变,也就是说指向的地址的内容不能改变, 而b本身可以改而指向其他地方