联合体和枚举
一。联合体核心定义一种自定义数据类型所有成员共享一块内存空间所以联合体也叫共用体它的关键字为union。给结构体其中一个成员赋值其他成员的值也跟着变化1内存分配规则编译器只按最大成员的大小分配内存保证能装下所有成员中占空间最大的那个。2特点给其中一个成员赋值其他成员的值会被覆盖因为共享内存。代码演示为什么是4因为联合体只为最大的成员分配空间最大成员的类型是int 类型所以是42.核心特性1地址共享代码验证输出结果均一致说明联合体的所有成员共享同一块内存的起始地址。2赋值相互影响代码验证输出结果解析1小端机器下int 0x11223344在内存中按低地址到高地址存储为44 33 22 112给un.c 0x55本质是修改了低地址的第 1 个字节也就是44的位置变成55所以最终的int值变成0x11223355。三。联合体大小的计算核心方法1联合体的大小至少是最大成员的大小2当最大成员大小不是最大对齐数的整数倍时就要对齐到最大对齐数的整数倍1.练习题解析第一步找最大成员大小--char [ 5 ]大小为5第二步找最大对齐数--int i 对齐数为4第三步向上对齐到最大对齐数的整数倍 →比 5 大的、4 的倍数是 8。第一步找最大成员大小 →short c[7]是 14 字节。第二步找最大对齐数--int i 对齐数为4第三步向上对齐到最大对齐数的整数倍 →比 14 大的、4 的倍数是 16。四。联合体的实际应用有一个礼品兑换活动礼品有图书杯子衬衫每⼀种商品都有库存量、价格、商品类型和商品类型相关的其他信息。图书书名、作者、⻚数杯子设计衬衫设计、可选颜⾊、可选尺⼨----传统结构体代码缺点不管当前商品是哪种所有属性都占用内存比如图书会白白浪费杯子 / 衬衫的属性空间。----联合体代码二。枚举核心概念枚举就是把有限固定的常量值一一列举出来专门用来表示有限且固定的选项比如星期、性别、颜色、状态等。关键字是enum1.枚举的声明与赋值1.1基础声明注意最后一个枚举常量不需要加逗号{}里的内容叫枚举常量默认从0开始后面的常量依次在前一个基础上 1。1.2手动指定初始值2.枚举的优点1增加代码的可读性与维护性2和#define定义的标识符比较枚举有类型检查更加严谨3便于调试预处理阶段会删除#define定义的符号4使用方便一次可以定义多个常量5枚举常量是遵循作用域规则的枚举声明在函数内就只能在函数内使用