画梁春尽落香尘—— C语言中const 规则探究

本文详细解析了C++中const限定符的作用机制,包括其对数据类型的影响、如何限制变量的操作以及权限传递的规则。并通过具体示例阐述了const在指针与引用中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数据类型对const而言是透明的

例如:

              const int a = 100;

              int const a = 100;

 

 

       const可以放在数据类型的两侧,两者是等价的。

 

二、const 用于封锁直接修饰的内容,并将该内容的属性变为只读

例如:

              1、 int const*p1 = &a;

              2、                p1 = &a;   //正确

              3、               *p1 = 200;   //错误

       语句 1 : const 直接修饰 *p1 ,所以 *p1以后不能作为左值存在

                     即 p1之后不能再进行解引用了。

                     该语句导致:只能修改指针p1指向的地址,不能改变该地址保存的值

              语句2 : 正确

              语句3 : 错误,*p1 不能做左值

 

 

           1、 int  *const p2 = &a;

              2、                 p2 = &a;     //错误

              3、                *p2 = 200;   //正确

       语句 1 : const 直接修饰 p1 ,所以 p2以后不能作为左值存在

该语句导致:只能修改指针p2所指向地址保存的值,不能改变指针p2 指向的地址

       语句 2 : 错误,p2 不能做左值

       语句 3 :,正确

 

1、 int const *const p3 = &a;

2、               p3 = &b;   //错误

 

 

3、              *p3 = 100;   //错误

语句 1 该语句导致不能对p3 进行任何修改,因p3 和 *p3 皆不能作为左值

 

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

例如:

int a = 10;        // a 具有读、写两权限

        intb = 20;          // b 具有读,写两权限

        constint ca = 10;   

// const 修饰ca使其不能作为左值,即ca只具有读权限,不能对其进行写入

        constint cb = 20;

     //const 修饰cb使其不能作为左值,即 cb 只具有读权限,不能对其进行写入

     int *p = &a; 

// 指针p保存a的地址

        p= &ca;  

 //错误,ca只具有读权限,p具有读、写两权限,有可能通过对 p 解引用修改ca的值

        constint *cp1 = &a;

      //正确,const直接修饰*cp1,使其不能作为左值,所以cp不能解引用,但可以改变cp1所指向的地址

        cp1= &b;

  //正确

        cp1= &ca;

     //正确

       const int *cp2 = &ca;

     //正确。该句导致cp2不能解引用,也就不用担心会通过解引用修改ca的值。

       int *const cp3 =&ca;

    //错误。该句const直接修饰cp3,cp3不能做左值,但可以对cp3解引用,可能修改ca的值,可ca不能写入,所以错误

       const int *const cp4 = &a;

          //该句导致cp4和*cp4都不能做左值,cp4不能动了,虽然没什么错误,但也没什么用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值