一、猜想:const*a 中,const 修饰 (*a),而 *const a 中,const 修饰 (a)。
二、编码测试:
1.测试代码:
int a = 10;
int b = 20;
int const *x = &a;
int* const y = &a;
cout<<"a的值 为:"<< a<<", b的值 为:"<<b<<endl;
cout<<"a的地址为:"<<&a<<", b的地址为:"<<&b<<endl<<endl;
//*x = b; //编译错误,*x 不能被赋值
x = &b;
//y = &b; //编译错误,y 不能被赋值
*y = b;
cout<<"x= "<<x<<", *x="<<*x<<endl;
cout<<"y= "<<y<<", *y="<<*y<<endl<<endl;
2.实验结果:
三、得出结论
分析实验结果,得出结论:
1.在 const *a 中,指针 a 可以再被赋值,但 *a 不能再被赋值;
2.在 *const a 中,指针 a 不能再被赋值,但 *a 可以再被赋值。
四、摘抄《C++ Primer》的解读
例:int a = 10; int *&r = &a;
要理解一个变量 r 的类型到底是什么,最简单的办法就是从右向左阅读 r 的定义。离变量名最近的符号(此例中是&r 的符号 &)对变量的符号有最直接的影响,因此 r 是一个引用。声明符的其余部分用以确定 r 引用的类型是什么,此例中的符号 * 说明 r 引用的是一个指针。最后,声明的基本类型部分指出 r 引用的是一个 int 指针。
另:const *a 中,const是底层const;而 *const a中,const是顶层const。(详见《C++ Primer》第5版 64页)