结构体
结构就是一些数据的集合,将数据整合起来。
结构体的声明
{}后的" ; " 不能丢掉,{}内为结构体的成员。
结构体的定义和初始化
结构体的对齐规则
- 第一个成员的地址在与结构体变量偏移量为0的地址。
- 其他成员变量要对齐到对齐数的整数倍的地址处。
对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
VS中默认的值为8
Linux中没有默认对齐数,对齐数就是成员自身的大小 - 结构体总大小为最大对齐数的整数倍
- 如果嵌套了结构体,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的总大小只能是所有最大对齐数的整数倍。
- 可以使用#pragma pack(要修改为的默认对齐数) 来修改默认对齐数
枚举
意思就是列举,可以将生活中的有限的类型列举出来,比如三原色,星期几,还有性别,月份等,就可以使用枚举。
枚举的定义
上面的enum Day是枚举的类型,"{ }"中的内容是枚举类型可能的取值,也被称为枚举常量。
这些取值都是有值的,默认从0开始,依次向后递增加1,定义时也可以给初始值赋值。
枚举的优点
- 使代码更加容易读懂,而不是简单的数字,可以根据字符来理解意思,维护起来更方便,只需要在指定位置修改即可,不用到处修改用到该变量的地方。
- 与#define定义的标识符比较有类型检查
- 防止与其他地方命名同名造成污染变量,影响其他变量
- 便于调试,能够在调试时观察到常量的存在
- 使用更加方便,可以一次定义多个常量,使代码不过于臃肿
枚举的使用
联合体
联合体的定义
这些类型定义的变量也包含一系列成员,特征是这些成员共用同一块空间。
联合体的声明
联合体的特点
联合的成员共用一块内存空间,因此联合体的大小至少是联合体最大成员的大小,且所有成员的起始地址相同。
联合体大小的计算
联合体的大小至少是联合体最大成员的大小
当最大成员的大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍数