目录一联合体类型1联合体的声明2,联合体的内存分配3相同成员的结构体和联合体的对比4联合体大小的计算5联合体的运用1利用联合体来节省空间2利用联合体判断大小端字节序二枚举类型1枚举类型的声明2枚举类型的优点3枚举类型的使用一联合体类型1联合体的声明与结构体类型联合体也是由一个和多个成员所构成这些成员可以是不同类型的。不同的是内存只为最大的类型开辟空间其他成员和最大成员共用一块空间所以联合体也叫共用体。2,联合体的内存分配联合体中的成员共用一块内存所以联合体的大小至少是所占内存最大的成员的大小。下面通过两个实例深度解析联合体的内存分配情况1.上述代码的输出结果为4 //表示联合体的大小与最大成员i的大小相同00DEFBA000DEFBA000DEFBA0 //表示联合体开创的空间的首地址和元素 i以及元素a的地址相同图中橙色部分表示i和a共用的部分。2储存时任然按照小端序列存储首元素地址最小。当不改变是c的地址处存入的就是44此时改变c,i也会跟着改变。相反改变ic也会改变。3相同成员的结构体和联合体的对比存储情况对比由此可知相较于使用结构体来说使用联合体更节省内存。但是相较于结构体来说由于c和i之间不相互独立当想要改变其一时就会影响另一个。4联合体大小的计算联合体的大小遵循两个规则1联合体的大小至少是最大成员的大小2联合体的大小是最大对齐数的整数倍处。金色为a和i的共用区域蓝色为a中最后一个元素的区域由于最大对齐数是4所以联合体的大小至少是4的倍数所以空出3个字节最后取8Un2的情况类似b占14个字节最大对齐数为4所以取16为最终大小。5联合体的运用1利用联合体来节省空间假设有三种物品书、杯子、衣服这三种物品有三种公共属性库存量价格商品类型除此之外还有自身属性其中图书有书名、作者、页数杯子有设计衣服设计、可选颜色、可选尺寸此时利用结构体存储这些信息如果利用联合体存储这些信息时通过联合体存储自身属性可以大大节省空间同时因为只会在三个物品中选择一个所以不会产生相互影响的情况。2利用联合体判断大小端字节序二枚举类型1枚举类型的声明枚举类型就是把可能的取值一一列举例如三原色red、green、blue性别male、female、secretenum color、enum sex都是枚举类型{}中的内容是枚举类型的可能取值也叫枚举常量。上面的取值都有默认值默认从0开始依次递增加1结果0 1 2也可以直接对里面的内容赋初值例如打印结果0 7 82枚举类型的优点我们可以使用#define 来定义常量相比之下使用枚举有什么优点枚举的优点1增加代码的可读性和维护性2和#define定义的标识符相比枚举有类型检查更加严谨3便于调试而#define预处理阶段会删除#define定义的符号4方便使用一次可以定义多个变量5枚举常量是遵循作用域规定的枚举声明在函数内只能在函数内使用3枚举类型的使用也可以使用整数给枚举变量赋值但在C中无法实现。枚举例题1枚举类型的枚举值只可能是整型常量表达式2枚举类型本质上是一种整数类型在内存中存储为整数3枚举类型可以作为函数的参数进行传递也可以作为函数的返回值
自定义类型——联合和枚举(简明分析)
目录一联合体类型1联合体的声明2,联合体的内存分配3相同成员的结构体和联合体的对比4联合体大小的计算5联合体的运用1利用联合体来节省空间2利用联合体判断大小端字节序二枚举类型1枚举类型的声明2枚举类型的优点3枚举类型的使用一联合体类型1联合体的声明与结构体类型联合体也是由一个和多个成员所构成这些成员可以是不同类型的。不同的是内存只为最大的类型开辟空间其他成员和最大成员共用一块空间所以联合体也叫共用体。2,联合体的内存分配联合体中的成员共用一块内存所以联合体的大小至少是所占内存最大的成员的大小。下面通过两个实例深度解析联合体的内存分配情况1.上述代码的输出结果为4 //表示联合体的大小与最大成员i的大小相同00DEFBA000DEFBA000DEFBA0 //表示联合体开创的空间的首地址和元素 i以及元素a的地址相同图中橙色部分表示i和a共用的部分。2储存时任然按照小端序列存储首元素地址最小。当不改变是c的地址处存入的就是44此时改变c,i也会跟着改变。相反改变ic也会改变。3相同成员的结构体和联合体的对比存储情况对比由此可知相较于使用结构体来说使用联合体更节省内存。但是相较于结构体来说由于c和i之间不相互独立当想要改变其一时就会影响另一个。4联合体大小的计算联合体的大小遵循两个规则1联合体的大小至少是最大成员的大小2联合体的大小是最大对齐数的整数倍处。金色为a和i的共用区域蓝色为a中最后一个元素的区域由于最大对齐数是4所以联合体的大小至少是4的倍数所以空出3个字节最后取8Un2的情况类似b占14个字节最大对齐数为4所以取16为最终大小。5联合体的运用1利用联合体来节省空间假设有三种物品书、杯子、衣服这三种物品有三种公共属性库存量价格商品类型除此之外还有自身属性其中图书有书名、作者、页数杯子有设计衣服设计、可选颜色、可选尺寸此时利用结构体存储这些信息如果利用联合体存储这些信息时通过联合体存储自身属性可以大大节省空间同时因为只会在三个物品中选择一个所以不会产生相互影响的情况。2利用联合体判断大小端字节序二枚举类型1枚举类型的声明枚举类型就是把可能的取值一一列举例如三原色red、green、blue性别male、female、secretenum color、enum sex都是枚举类型{}中的内容是枚举类型的可能取值也叫枚举常量。上面的取值都有默认值默认从0开始依次递增加1结果0 1 2也可以直接对里面的内容赋初值例如打印结果0 7 82枚举类型的优点我们可以使用#define 来定义常量相比之下使用枚举有什么优点枚举的优点1增加代码的可读性和维护性2和#define定义的标识符相比枚举有类型检查更加严谨3便于调试而#define预处理阶段会删除#define定义的符号4方便使用一次可以定义多个变量5枚举常量是遵循作用域规定的枚举声明在函数内只能在函数内使用3枚举类型的使用也可以使用整数给枚举变量赋值但在C中无法实现。枚举例题1枚举类型的枚举值只可能是整型常量表达式2枚举类型本质上是一种整数类型在内存中存储为整数3枚举类型可以作为函数的参数进行传递也可以作为函数的返回值