1.共用体(union)
● 共用体union是一个能在同一个存储空间存储不同类型数据的类型
● 共用体所占的内存长度等于其最长成员的长度。
● 同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用
● 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员的值会被覆盖
● 共用体变量的地址和它的各成员的地址都是同一地址
共用体的主要用途有:
1 节省内存空间:当多个成员变量不会同时使用,但需要共享同一块内存空间时,可以使用共用体来节省内存。
2 数据类型转换:共用体可以用于不同类型之间的转换,通过存储一个成员变量,然后通过另一个成员变量来读取转换后的值。
共用体的主要特点:
1 共用体的大小取决于最大的成员的大小。
2 共用体的成员 共享同一块内存空间,只能同时存储其中一个成员的值。
3 对共用体的任何成员的修改都会影响到其他成员。
4 共用体的成员可以具有不同的数据类型,但它们在内存中的起始位置是相同的。
1.2共用体和结构体的区别(面试题)
首先定义结构体类型的关键字是struct 而定义共用体类型的关键字是union
●存储方式:
○结构体:结构体中的每个成员都占据独立的内存空间,成员之间按照定义的顺序依次存储
○共用体:共用体中的所有成员共享同一块内存空间,不同成员可以存储在同一个地址上
●内存占用:
○结构体:结构体的内存占用是成员变量占用空间之和,每个成员变量都有自己的内存地址
○共用体:共用体的内存占用是最大成员变量所占用的空间大小,不同成员变量共享同一块内存地址
2.枚举(enum)
(1)枚举是C语言中的一种构造数据类型,它可以让数据更简洁,更易读,对于只有几个有限的特定数据,可以使用枚举.
(2)枚举对应英文(enumeration,简写enum)
(3)枚举是一组常量的集合,包含一组有限的特定的数据
(4)枚举语法定义格式为:
enum 名称{
值 1;
值2;
.....
}; 枚举主要是用来定一组常量的。
(5)枚举成员的类型
枚举的成员默认情况下都是整数类型,通常是int类型。这意味着每个枚举成员都会被赋予一个整数值,并且这些整数值从0开始递增。如果没有显式地指定枚举成员的值,那么第一个成员的值为0,第二个成员的值为1,依此类推。同时,可以显式地为枚举成员指定一个整数值,这个值可以是正整数、负整数或零。
2.2枚举的应用
1.表示状态和标志位
枚举可以用来表示状态和标志位。例如,使用枚举来表示开关的状态,如打开(ON)和关闭(OFF);或者表示系统的状态,如就绪(READY)、等待(WAITING)等;表示选项和模式,可以定义不同的操作模式,如读取模式、写入模式和编辑模式。
2.表示星期和月份
枚举常用于表示星期和月份,以提高日期和时间处理的可读性。
3.状态机和控制流
枚举常用于状态机的实现,以便在程序中管理不同的状态。这对于处理复杂的控制流非常有用。