1688网站可以自己做吗,淄博微网站建设,安徽 网站建设,足球用品网络营销方式Union
一#xff1a;联合类型的定义 联合也是一种特殊的自定义类型#xff0c;这种类型定义的变量也包含一系列的成员#xff0c;特征是这些成员公用同一块空间#xff08;所以联合也叫共用体#xff09; 比如#xff1a;共用了 i 这个较大的空间 二#xff1a; 联合的…Union
一联合类型的定义 联合也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员特征是这些成员公用同一块空间所以联合也叫共用体 比如共用了 i 这个较大的空间 二 联合的特点 联合的成员是共用同一块内存空间的这样一个联合变量的大小至少是最大成员的大小因为联 合至少得有能力保存最大的那个成员。 由图可知 c 和 i 的起始地址一致。 三 联合大小的计算 联合的大小至少是最大成员的大小。 当最大成员大小不是最大对齐数的整数倍的时候就要对齐到最大对齐数的整数倍。 比如 重点
联合体中有数组的时候数组和对齐数进行比较的时候是单个数组元素的大小和默认对齐数来进行比较得到最终的对齐数。
Un1的解释
所以Un1中c的对齐数是1i的对齐数是4所以最大对齐数是4目前联合的大小至少是最大成员的大小也就是c数组的大小5,所以联合体最终的大小为离5最近的4的倍数也就是8。
Un2的解释
所以Un2中c的对齐数是2i的对齐数是4所以最大对齐数是4目前联合的大小至少是最大成员的大小也就是c数组的大小14,所以联合体最终的大小为离14最近的4的倍数也就是16。
Struct
一. 基本原则
1. struct中成员变量的声明顺序与成员变量对应的内存顺序是一致的
2. struct本身的起始存储地址必须是成员变量中最长的数据类型的整倍数注意是最长的数据类型而不是最长的变量
3. 内存对齐与编译器设置有关。
struct {
int number;
double tmp;
}; 因此结构体大小为44816
struct {
int number;
double tmp;
char c;
}; 因此结构体大小为4481724结构体大小必须是最大类型长度这的整倍数所以在尾部7。