C语言——联合与枚举

大家好,上篇文章和大家分享了C语言中的自定义类型结构体。接下来,我们再来了解一下其他的自定义类型——联合与枚举,记得三连支持一下哦!

ebe3d837b8494cd9b8ef4127ff0ed828.jpeg

一、联合体

像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。

1.联合体类型的声明

联合体的声明和结构体类似。

如:

957cdaeeb750438a8e9c9776120b1779.png

但是给联合体其中⼀个成员赋值,其他成员的值也跟着变化。

a785226249da43da9ee3665ce8c18e7d.png90913c4f44db4ea2b89439450bf2af8b.pngf3620606b12e46d2a07b801986735b2a.png

我们可以看到,个成员赋值后,其他的成员的值也发生了改变了,这是为什么呢?这肯定和它的存储方式有关。

2.联合体的特点

为了搞清联合体的特点我们先来看看一个联合体变量的大小,会不会和结构体一样呢?

ac00597b8a8a4fde9985d6e9eff12ec9.png

我们可以看到是4个字节,只占一个整型的大小。

所以联合体的特点是:所有成员共⽤同⼀块内存空间。但是编译器只为最⼤的成员分配⾜够的内存空间。所以联合体也叫:共⽤体。

我们可以来打印一下各个成员的地址,看看是不是这样:

098e77bea46445458020328171161c60.png

我们可以看到每个成员地址都是一样的,它们确实共用一块地址。

fafd2cc88923427ab63914bdf96e96aa.png

上面这段代码我们可以看到:a的第四个字节的内容修改为55了.

8dec2b10914a4d9f9736253b28f7e908.png

3.联合体大小的计算

通过上面的观察我们可以发现,结构体比较浪费空间,而联合体是比较节省空间的。

所以联合体计算大小:

1.联合的⼤⼩⾄少是最⼤成员的⼤⼩。
2.当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍。

下面我们来看例子:

94c1336c97c648c191714bc3a11cea04.png

它们的大小为什么是这么多呢?

d91ae5739c8b42ee81e44989e918267f.png3bfc1146a27248caab97b08edea4a399.png

从上面我们可以看出:联合体是非常节省空间的,但也不是无节制的节省。

二、枚举

枚举也是一个自定义类型,枚举顾名思义就是⼀⼀列举,把可能的取值⼀⼀列举。

比如:一周的星期一到星期日可以列举出来;

月份有十二个月也可以列举,等等。

1.枚举类型的声明

枚举的声明也和结构体类似。如:

dc51d326c30444f9b26b6080be27fd29.png3c35c11173614770bd861f962e8a240e.png

以上定义的 enum days , enum Color 都是枚举类型。{}中的内容是枚举类型的可能取值,也叫枚举常量 。

这些可能取值都是有值的,默认从0开始,依次递增1。如:95f1895f56b444d086e018f65c751332.png

当然在声明枚举类型的时候也可以赋初值,如:
6065c192685d4269ac4252cd61e3c368.png

通俗来讲,枚举类型和#define差不多,但是并不相同。

2.枚举类型的优点

我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举?
枚举的优点:
1. 增加代码的可读性和可维护性;
2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨;
3. 便于调试,预处理阶段会删除 #define 定义的符号;
4. 使⽤⽅便,⼀次可以定义多个常量;
5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤。

所以说枚举还是有许多优点的。

3.枚举类型的使⽤

那么枚举该怎么使用呢?最主要的用法上面已经介绍了。1da112a4a8f84c4e99a8f7c89aaadd08.png

那是否可以拿整数给枚举变量赋值呢?在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查⽐较严格。
好了,以上就是本篇文章的全部内容了,感谢大家的观看,创作不易,三连支持一下吧!

812dd1a160274e53b45d2b148cd7ba71.gif

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值