12-经典问题分析一-const和引用的疑问

1、关于const的疑问

这里写图片描述

2、

这里写图片描述

3、

这里写图片描述

#include <stdio.h>

int main()
{
    const int x = 1;      //const 常量 x,用字面量初始化的,存在字符号表中,x分配的空间未使用
    const int& rx = x;    //只读变量rx,rx为编译器为x常量所分配未使用的空间,这时候rx代表一个只读变量

    int& nrx = const_cast<int&>(rx);//消除rx的只读变量的只读属性,得到一个普通变量 nrx,nrx为rx空间的引用

    nrx = 5;

    printf("x = %d\n", x);
    printf("rx = %d\n", rx);
    printf("nrx = %d\n", nrx);
    printf("&x = %p\n", &x);
    printf("&rx = %p\n", &rx);
    printf("&nrx = %p\n", &nrx);

    volatile const int y = 2;//y是只读变量
    int* p = const_cast<int*>(&y);//去除y地址的只读属性

    *p = 6;   //y被修改

    printf("y = %d\n", y);
    printf("p = %p\n", p);

    const int z = y;//创建一个只读变量z用y赋值,

    p = const_cast<int*>(&z);//去除只读属性

    *p = 7;      //修改z的值

    printf("z = %d\n", z);
    printf("p = %p\n", p);

    char c = 'c';
    char& rc = c;
    const int& trc = c;//const初始化类型不同,则创建为新的只读变量trc 为int,c为 char 类型,所以trc = 'c'

    rc = 'a';

    printf("c = %c\n", c);
    printf("rc = %c\n", rc);
    printf("trc = %c\n", trc);

    return 0;
}
结果:
x = 1
rx = 5
nrx = 5
&x = 0x7ffe89359240
&rx = 0x7ffe89359240
&nrx = 0x7ffe89359240
y = 6
p = 0x7ffe89359244
z = 7
p = 0x7ffe89359248
c = a
rc = a
trc = c

4、关于引用的疑问

这里写图片描述

5、引用的本质是常量指针

这里写图片描述

6、

这里写图片描述

7、小结

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值