c/c++ 结构体、联合体、枚举

结构体

结构体内存对齐规则:

1、结构体的第一个成员对齐到结构体变量起始位置偏移量为0的地址处

2、其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。

对齐数:编译器默认的一个对齐数与该成员变量大小的较小值。

vs 中默认对齐数是8

Linux中gcc没有对齐数,对齐数就是该成员变量自身大小。

3、该结构体总大小最大对齐数(结构体中每个成员都有一个对齐数,所有对齐数最大的)整数倍。

c/c++ 结构体、联合体、枚举_第1张图片

4、如果嵌套了结构体,嵌套的结构体成员对齐到自己内部成员最大对齐数的整数倍,然后结构体的整体大小就是所有对齐数(含嵌套结构体成员对齐数)的整数倍。

c/c++ 结构体、联合体、枚举_第2张图片

 运用offsetof---宏 (需要包含头文件#include)---->计算结构体成员相较于起始位置的偏移量。

c/c++ 结构体、联合体、枚举_第3张图片

联合体

联合体也是由一个或者多个成员变量来构成,这些成员可以是不同类型,但是编译器只是为最大成员分配足够的空间,联合体的特性就是所有成员共用一块空间,给联合体其中一个成员赋值,其他成员也会相应变动。

c/c++ 结构体、联合体、枚举_第4张图片

可以发现联合体有个特点,就是所有的成员共用一个空间,那么对一个变量进行修改,也会影响另外一个变量。

枚举:

c/c++ 结构体、联合体、枚举_第5张图片

枚举优点:

增加代码的可读性和可维护性,使用起来也较为方便,可以一次性定义多个常量。 

你可能感兴趣的:(c语言,c++,开发语言)