c++强制转换的问题

#include <iostream>
using namespace std;
int main() {
    const int i = 10;
    //int *pi = &i; 编译错误(C++中不行)
    const int *pi = &i; //ok
    //*pi = 20; 编译错误(指向常量的指针无法修改常量)

    //下面尝试,强转转换来修改常量:
    int *pi2 = (int*)&i; //将常量i的地址强转为int *
    *pi2 = 20;   //将pi2指针指向的地址内容修改为20
    //观察 *pi2 和 i 对应的内存地址是否一样:
    cout << "pi2=" << pi2 << " &i=" << &i << endl;
    //观察 *pi2 和 i 的值
    cout << "*pi2=" << *pi2 << " i=" << i << endl;
    //输出 *pi2=20 i=10
    //思考:为什么会出现这样的结果??

    //一定要这么做,怎么做?
    volatile const int ii = 10; //使用volatile关键字
    int *pii = (int*)&ii;
    *pii = 20;
    cout << "*pii=" << *pii << " ii=" << ii << endl;
    //输出 *pii=20 ii=20

    return 0;
}

int pi2 = (int)&i; //将常量i的地址强转为int *这行代码是什么意思

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值