#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,表示程序正常结束
}
04-26
3451

08-11
7万+

09-03
6729
