自定义类型:联合体union

本文详细介绍了联合体在C语言中的声明方法,其特点包括共享空间和成员间的影响。讨论了联合体大小的计算机制,以及如何利用联合体节省内存空间。最后,提出通过编写程序检测机器的字节序(大端或小端)。
摘要由CSDN通过智能技术生成

联合体类型的声明

联合体的特点

联合体大小的计算

1.1联合体的声明

和结构体一样,联合体也是一个或多个成员构成的,这些成员可以
是不同类型的,但是编译器只为最大的成员分配足够的空间,联合
体的特点是所有成员公用同一块空间

对比一下结构体和联合体
在这里插入图片描述
联合体的声明、创建、初始化

union Un
{
	char c;
	int i;
};
int main()
{
	union Un u = { 0 };
	return 0;
}

在这里插入图片描述
大小是4个字节

1.2联合体的特点

为什么是4个字节?

在这里插入图片描述
取元素地址
在这里插入图片描述
他们会互相影响,同一时间用了 c 就不能用 i

1.3联合体大小的计算

在这里插入图片描述
上面的代码,最大成员大小为5

所占字节却是8个字节

联合体的大小不一定就是最大成员的大小

当最大的成员大小不是最大对齐数的整数倍时,就对齐到最大对齐数的整数倍

char类型最大对齐数是1
int 是 4
最大对齐数是4,所以对齐到8

在这里插入图片描述
short 是 2 个字节

联合体的应用

联合体是可以节省空间的,举个例子:

比如,我们要搞⼀个活动,要上线⼀个礼品兑换单,礼品兑换单中有三种商品:图书、杯⼦、衬衫。
每⼀种商品都有:库存量、价格、商品类型和商品类型相关的其他信息。
图书:书名、作者、⻚数
杯⼦:设计
衬衫:设计、可选颜⾊、可选尺⼨

在这里插入图片描述

在这里插入图片描述

联合体的练习

写⼀个程序,判断当前机器是⼤端?还是⼩端?
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值