1. 联合体
联合体和结构体类似。
联合体类型的声明:
联合体的特点:
像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以是不同的类型。但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共⽤体。给联合体其中⼀个成员赋值,其他成员的值也跟着变化。
我们发现当改变un.c时un.i也跟着改变,改变un.i时un.c也跟着改变。所以对于联合体来说,同一时间我们只用一个成员,否则会发生冲突。
结论:同一时间在多个成员中我们只需要用到一个成员时,可以将多个成员放入联合体中。
联合体大小的计算:
联合变量的⼤⼩⾄少是最⼤成员的⼤⼩(因为联合⾄少得有能⼒保存最⼤的那个成员)。
当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍。
写一个程序,判断当前机器是大端存储还是小端存储
联合体可以节省空间
我们要搞⼀个活动,要上线⼀个礼品兑换单,礼品兑换单中有三种商品:图书、杯⼦、衬衫。
每⼀种商品都有:库存量、价格、商品类型和商品类型相关的其他信息。
图书:书名、作者、⻚数
杯⼦:设计
衬衫:设计、可选颜⾊、可选尺⼨
我们把公共属性单独写出来,剩余属于各种商品本⾝的属性使⽤联合体联合起来,这样就可以
介绍所需的内存空间,⼀定程度上节省了内存。
2. 枚举
枚举类型用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
枚举顾名思义就是⼀⼀列举。
把可能的取值⼀⼀列举。
枚举类型的声明:
enum 枚举类型的关键字,tag 枚举类型名,enum tag 用户定义的枚举类型
{}中的内容是枚举类型的可能取值,也叫枚举常量 。
这些可能取值都是有值的,默认从0开始,依次递增1。
枚举类型的使⽤:用枚举常量给枚举变量赋值
那是否可以拿整数给枚举变量赋值呢?在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查⽐较严格。
在声明枚举类型的时候也可以赋初值,且赋值前的枚举常量的值不变,赋初值后的枚举常量值从赋初值的枚举常量开始,依次递增1。
为什么使⽤枚举?
我们可以使⽤ #define
定义常量进行对比。
枚举类型的优点:
1. 增加代码的可读性和可维护性2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。3. 便于调试,预处理阶段会删除 #define 定义的符号4. 使⽤⽅便,⼀次可以定义多个常量5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤