一联合体:
1.联合体类型的声明:
像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。 但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共⽤体。给联合体其中⼀个成员赋值,其他成员的值也跟着变化。
2.联合体的特点:
联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合⾄少得有能⼒保存最⼤的那个成员)。
可以看出来联合体un开辟了4个字节的空间,并且char类型的c与int类型的i地址是一样的,所以更加可以说明联合体中的成员是共用一块内存空间的。
经过调试可以看出来,当内存开辟4个字节内存空间后,给联合体成员中的i赋值时已经将4个字节的内容全部用掉,但是这时又给联合体成员中的c赋值但此时内存空间已经不够用,所以覆盖了最后一个字节中的内容。
而将赋值顺序倒过来时也可以看出那一个字节的内容被覆盖了。先更改低地址处的内容。
综上可知给联合体其中⼀个成员赋值,其他成员的值也跟着变化。
3.相同成员的结构体和联合体对比:
由调试内存窗口可以看出两者内存分配的不同:
4.联合体大小的计算:
• 联合体的大小⾄少是最⼤成员的大小。
5.联合体的妙用:
使⽤联合体是可以节省空间的,举例: ⽐如,我们要搞⼀个活动,要上线⼀个礼品兑换单,礼品兑换单中有三种商品:图书、杯⼦、衬衫。
6.联合体小练习:
之前写过一个小程序来判断当前机器是大端存储还是小端存储。
二.枚举:
1.枚举的概念:
枚举顾名思义就是⼀⼀列举。
把可能的取值⼀⼀列举。
2.枚举的初始化:
枚举跟结构体有些相似,但其每个成员用逗号分隔开。
枚举的每个成员其实都用连续的数字表示,如果没有赋初值的话枚举中的第一个成员就从0开始往后一个个递增。
3.枚举和宏定义的比较:
宏定义定义的三原色:
枚举定义的三原色:
4.枚举便利的用处:
当我们要写一个计算机程序时:
我们不难发现如果switch case语句中放的是数字,这会让读代码的人去找这个数字代表计算器中的加法,减法,乘法还是除法,这样就会很麻烦。
而如果用联合体来编写时,即增加了代码可读性,也增强了可维护性。
这样用户就知道你这case语句中表示的是什么意思,之后更改代码也会更加方便。