Union的一个知识点


union是大家比较熟悉的一个数据类型,假设有:


union Ut

{

short  sh;

char  ch;

};


假设有如下执行代码

void main()

{

Ut  t;                // 1

t.sh = 0x1000; // 2

t.ch = 0x01;     // 3

}

如果是小端机器上,那么 代码执行完代码 2 处,t 对象的 变量的内存为:00 10,图示1如下



执行完代码 3 处后, t 对象的内存为图2所示:


t.ch = 0x01 ,就是红色的 01, 仅覆盖了原有的 00


内存却不是:01 00,(t.ch只能够操作一个字节的空间)


总结:一直以为,union的确是按最大的成员变量来开辟内存空间,但是只存放一个成员的值,以该程序为例,执行 t.sh = 0x1000;内存如图1所示。

但是执行 t.ch = 0x01后,以前的理解是会将内存先清空,再保存 t.ch的值,该是 01 00,但实际却是图2所示的 01 10 ,执行完代码3处,t.ch只是改变自己的一个字节,内存中的其他位置不作处理,只是保存自己的一个字节 01,后面的 10未操作。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值