const内存分配情况

常量结构体间接修改值

struct MyStruct
{
	int a;
	string name;
};
int main(void)
{
	const MyStruct ms = {18,"李四"};
	//给结构体的变量赋值,定义结构体内的数据类型为常量,常量的结构体必须初始化
	//ms.a = 20;//错误,常量结构体不能被直接修改,下面演示常量间接修改值

	MyStruct* p = (MyStruct*)&ms;
	p->a = 20;//因为给分配了内存空间
	p->name = "张三";
	cout << "姓名:" << p->a << "年龄:" << p->name << endl;
	//把ms地址赋值给指针p,对const常量取地址会分配临时内存空间
	//把结构体变量ms地址给到指针p,等号=左右的数据类型一样
	//MyStruct* 结构体变量名代表结构体数据类型
	//通过解引用p,间接修改常量结构体成员的值
}

 常量间接修改值

    int a = 10;//普通变量
	const int b = a;//把a变量10赋值给常量b
	int* p = (int*)&b;//把b地址赋值给指针p,对const常量取地址会分配临时内存
	*p = 100;
//通过变量a间接修改值,通过解引用指针修改 b 的值
//这里是把a变量赋值给常量b,解引用会成功通过地址修改值
	cout << b << endl;//打印显示为100
	cout << *p << endl;//打印显示为100
	cout << &b << endl;
	cout << &p << endl;
	//打印&b和&p的地址 发现程序为p和b重新分配了内存地址

	const int b = 10;//const修饰后b是常量,值不能被修改
	int* p = (int*)&b;//常量b地址赋值给指针p
	*p = 100;//错误 通过解引用把100赋值给*p不会成功
//因为解引用是改地址的值,而b是常量已经被写死为10,不能被更改
//上面的b是变量a赋值给b,所以可以修改,这个例子不能修改

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值