const和*混合使用
常量指针:const *a; 本质上a是一个指针,常量表示a的指向是一个常量,所以a的指向不能改变
指针常量:* const a;本质上a是一个常量,表示是一个指针类型的常量
简单的记法就是从左向右读,const后面跟谁谁不变(但是C++课本上定义的方法是从右往左,具体还需要会使用)
int aa = 10, bb = 20;
int c = 30, d = 40;const int *a = &aa; //a是常量指针,所以所以此刻a指向的内容不能改变,但是可以改变a的值
int *const b = &bb; //b是指针常量,此刻b的值不能改变,但是指向的内容可以改变
a = &c; //此时a的地址变为了c,此刻a就是c的指针,而aa的值不变
//*a = *&d; 错误,因为是常量指针,所以指向不能改变
*b = d; //此刻*b的指向是d,但是b的地址没有变,所以此刻就把d的值付给了b,此时b和bb的值都变为了d;此时由符号*得到b所指的对象,然后把d赋值给所指的对象
//b = &c; 错误,因为是指针常量,所以b的值不能改变
上面代码中,a是一个常量指针,const紧挨着*,所以*a不能改变,而a的值可以改变,而a的值改变后,就和原来的指向aa没有关系了。
b是一个常量指针,const紧挨着b,所以b的值不能改变,而*b可以改变,但是由于地址不变,所以*b指向改变后,b任仍然和bb的地址一样。
顶层const:类似于常量指针(*const),表示指针本身是一个常量
底层const:类似于指针常量(const *),表示所指的对象是一个常量