关于const的用法

在生活或工作中,对于一些文件、程序或数据,需要设定对它们的读写权限。在必要的时候,如果限定一些数据只具有“读”的权限,而不能对它们进行赋值或修改,这时,我们需要使用 ‘const’ 对数据进行修饰。

在对const进行解释之前,先引入两个名词:左值、右值;

   左值:放在“=”(赋值)符号左边的就是左值。其他情况都是右值。例如:a = 10,a为左值;a<10,a为右值。

  左值:写权限;可以对左值进行赋值、修改等操作。

  右值:读权限;只能读取右值,不能对它进行赋值修改操作。

   const:限定变量的权限,变成只读(不能做左值)。

 例如:int a;
            a = 10;  //左值,放在"="符号左边就是左值,其它情况都是右值
            int b = a;
            const int ca = 10;  //限定写权限,变成只读
            b = ca;  //ok;将ca的值赋值给b,对ca只进行“读”操作;
            ca = 20;  //error;将20赋值给ca,对ca进行了“写”操作,语句错误;
            const int cb;  //error;由于后续不能再对cb进行赋值,需要在定义cb的时候进行赋值,否则cb无意义

          1、基本数据类型对于const透明;

 例如:  const int ca = 10;
              int const cb = 20;  //这两个语句的作用是一样的;const可以忽略数据类型,只修饰ca和cb

          2、const修饰它的直接右边;

例如: int a = 10;
            int b = 20;
            int *p = &a;
            p = &b;
            int *q = &a;
            q = p;
            *p = 200;
            b = *p;
            const int *p1 = &a;
            p1 = &b;  //ok,数据类型int对于const是透明的,而‘*’不是,所以const忽略int直接修饰 *p1;
            *p1 = 1000;  //error,因此可以修改p1,不能修改*p1;
            int const *p2 = &a;  //p2完全等同p1;
            int *const p3 = &a;  //const直接修饰p3;因此可以修改*p3,不能修改p3;
            p3 = &b;  //error
            *p3 = 100;  //ok

         3、权限可以等同或者缩小传递,不能放大传递

例如: int a = 10;
            int b = 20;
            const int ca = 10;
            int *p1 = &a;
            *p1 = 20;  //通过将p1解引用间接对a赋值,此时a=20;
             p1 = &b;
            int *p2 = &ca;  //error,将指针p2设为ca的地址,从而可以通过将p2解引用间接对ca进行赋值,权限放大传递,语句错误
            const int *p3 = &a;
            const int *p4 = &ca;  //指针p4存储ca的地址,const修饰*p4,因此*p4只有“读”操作,对p赋值修改的是ca地址,不影响
            int *const p5 = &a;
           int *const p6 = &ca; //error,const修饰的是p6,因此对*p6赋值是允许的,而*p6解引用可以间接对ca赋值因此语句正确,操作错误

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值