04737 C++ 强制类型转换示例(P35)

#include <iostream>  // 包含输入输出流库
using namespace std; // 使用标准命名空间

int main()
{
    int a = 10;  // 定义一个整型变量a,并初始化为10
    const int *p = &a;  // 定义一个指向常量的指针p,指向a的地址
    const int ca = 30;  // 定义一个常量ca,并初始化为30
    int *q;  // 定义一个整型指针q

    // 输出a的地址和值
    cout << "a的地址为:\t" << &a << "\ta的值为:\t" << a << endl;

    // 输出p指向的地址和p所指向的值
    cout << "*p指向的地址为:" << p << "\t*p的值为:\t" << *p << endl;

    q = const_cast<int *>(p);  // 使用const_cast去除p的常量性,并将结果赋给q
    *q = 20;  // 通过q修改a的值

    // 再次输出a的地址和值,此时a的值已经被修改为20
    cout << "a的地址为:\t" << &a << "\ta的值为:\t" << a << endl;

    // 输出p指向的地址和p所指向的值,此时p指向的值已经被修改为20
    cout << "*p指向的地址为:\t" << p << "\t*p的值为:\t" << *p << endl;

    // 输出q指向的地址和q所指向的值,此时q指向的值已经被修改为20
    cout << "*q指向的地址为:\t" << q << "\t*q的值为:\t" << *q << endl;

    cout << "分界线" << endl;  // 输出分界线

    p = &ca;  // 将p指向常量ca的地址

    q = const_cast<int *>(p);  // 使用const_cast去除p的常量性,并将结果赋给q
    *q = 40;  // 通过q修改ca的值(这是未定义行为,因为ca是常量)

    // 输出ca的地址和值,由于ca是常量,其值不会被修改
    cout << "ca的地址为:\t" << &ca << "\tca的值为:\t" << ca << endl;

    // 输出p指向的地址和p所指向的值,此时p指向的值已经被修改为40
    cout << "*p指向的地址为:\t" << p << "\t*p的值为:\t" << *p << endl;

    // 输出q指向的地址和q所指向的值,此时q指向的值已经被修改为40
    cout << "*q指向的地址为:\t" << q << "\t*q的值为:\t" << *q << endl;

    system("pause");  // 暂停程序,等待用户输入
    return 0;  // 返回0,表示程序正常结束
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值