(一)指针和const
const关键字加在定义变量之前。说明定义的变量是一个常变量
int a = 10;
int* p = &a;
//p是一个int类型的指针变量,保存a的地址
*p = 20; //可以通过解引用的方式修改保存地址中的值
const int* p1 = &a;
int const *p2 = &a;
int* const p3 = &a;
const int* const p4 = &a;
分析:
- (常指针)p1、p2 指向a的地址,const修饰的是*p1 和 *p2,所以p1和p2的值可以修改,*p1 和 *p2的值不可修改
- p3 指向a的地址,const修饰的是p3,所以p3的值不可修改,*p3的值可以修改
- p4指向a的地址,从右向左,第一个const修饰p4的值,第二个const修饰p4的值,所以p4和p4的值都不可修改
结论:
看准 const 和 * 的位置:
- const 在*左边,const修饰 *变量名;
- const 在*右边,const修饰 变量名;
(二)能力缩小定律
(1)小试身手
我们对(一)进行小小地修改,看下面那句代码编译错误?
int a = 10;
int* p = &a;
const int* p1 = p;
int const