联合体和枚举

上一篇博客已经介绍了C语言自定义类型中的结构题,今天我来通过另一篇博客来介绍C语言中的另外两种自定义类型:联合体和枚举。

一:联合体

联合体也称共用体,联合体的各个成员共用一块内存空间,大大节省了内存。

联合体的关键字是union,联合体类型的创建方法——变量的创建方法——变量的输入输出等——和结构体类似(具体可以看我的上一篇博客:结构体)

联合体和结构体的区别

联合体只为最大的成员分配足够的空间。联合体的特点是所有成员共用同一块内存空间。

因此给联合体其中一个成员赋值,其余成员也会跟着发生变化

一个联合变量的大小,至少是那个最大成员的大小。(至少得有能力保存最大的那个成员)

怎么证明上面的红色内容呢?

我们知道,每个字节都有自己唯一的地址标号,只要证明联合体成员的起始地址相同,即可证明

因此联合体的成员在同一时间只能使用一个

联合体大小的计算:

联合体的大小至少是最大成员的大小。

联合体也存在内存对齐,当最大成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍(关于最大对齐数的相关内容,请参考上一篇博客:结构体)

百度笔试题:

写一个程序,判断当前机器的大小端;

联合体的意义

使用联合体是可以节省空间的,比如,我们要搞一个活动,活动中要出售三种商品:图书 杯子和衬衫。每一种商品都有:库存量 价格 商品类型以及其他相关的信息。

图书:页数 书名  作者

杯子:设计

衬衫:颜色 尺寸 设计

如果我们写出以下代码

这种代码虽然可行,用起来也方便,但是结构体中包含了所有商品个各种属性,这样结构题的大小就会偏大(实际上每个商品不一定包含上面的全部属性)就会浪费内存,代码性能就会降低

所以我们可以把所有商品共有的属性单拿出来,剩余属性使用联合体,出售哪个商品就使用哪个商品的属性,这样在一定程度上就节省了内存。

二:枚举类型

枚举类型的关键字位enum

和结构体以及联合体一样,枚举类型也是也是C语言中的一种自定义类型。

枚举类型顾名思义就是一一列举。

把可能的取值一一列举。

比如:

一周:有星期一到星期日——可以一一列举。

性别:可以一一列举

月份:可以一一列举。

三原色:可以一一列举。

这些数据的表示就可以使用枚举了。

以上enum Day  enum Sex   enum color都是枚举类型。

{}中是枚举类型的可能取值,也叫枚举常量

这些可能取值都是有值的,默认从0开始,依次递增一,当然在声名枚举类型的时候也可以赋初值

枚举类型的优点:

我们可以使用#define定义常量,为什么还要用到枚举类型呢?

枚举的优点:

1.增加代码的可读性和可维护性。

2.和#define定义的标识符比较枚举有类型检查,更加严谨。

3.便于调试,预处理阶段会删除#define定义的符号。

4.使用方便,一次可以定义多个变量。

5.枚举类型是遵循作用域规则的,枚举声名在函数内,只能在函数内使用。

枚举类型的使用:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值