C语言中联合(union)的内存分配

本文介绍了C语言中的联合类型union的内存使用情况,特别是当union包含一个整数和字符数组时,如何理解在大端和小端系统中的存储差异。在大端系统中,高位字节存储在低地址,而小端系统则相反。通过实例展示了如何根据系统字节序转换数据来获取正确输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于一个简单点的联合Union

union unn{

int i;

char a[3];

}

这样的联合占用四个字节没有任何问题。但是对于如下问题

unn untest;

untest.i=0x123456;

此时a[0],a[1],a[2]的值对于大端系统(高位低寸)存储内容应该是0x00,0x12,0x34,0x56此时将前三个字节转化到char即可输出结果

对于小端系统(高位高寸)存储内容应该是0x56,0x34,0x12,0x00取出前三个字节输出为char即可

二、什么是大端和小端

        Big-Endian和Little-Endian的定义如下:
1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值