认识联合体(共用体)以及联合体大小的计算方法

        目录

1、什么是联合体

2、联合体的特点

3、联合体大小的计算


 

1、什么是联合体

联合体是一种特殊的自定义类型,联合体中的成员可以共用一部分内存,所以也叫做共用体

联合体的声明和定义如下:

//联合类型的声明
union Un
{
 char c;
 int i;
};

//联合变量的定义
union Un un;

2、联合体的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联 合至少得有能力保存最大的那个成员)。

以上面的为例,整型变量 i 和 字符型变量 c 共用一个字节,此时联合体的大小就是变量 i 的大小。

3、联合体大小的计算

联合体大小的计算需要满足如下两个条件:

  • 联合的大小至少是最大成员的大小。
  • 联合体大小必须是最大对齐数的整数倍。当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
#include <stdio.h>
union Un1
{				//每个元素/变量自身大小 编译器默认对齐数——最大对齐数: 成员大小
	char c[5];	//1 8 —— 1 : 5
	int i;		//4 8 —— 4 : 4
};
union Un2
{
	short c[7];	//2 8 —— 2 : 14
	int i;		//4 8 —— 4 : 4
};


int main() {
	printf("%d\n", sizeof(union Un1));	// 8
	printf("%d\n", sizeof(union Un2));	// 16
	return 0;
}

 联合体Un1:

  1. 最大对齐数是 4 ,最大成员大小是 5
  2. 此时最大成员大小是 5 ,而联合体大小必须是对齐数的整数倍,如果联合体大小是 4,就无法容纳最大成员大小;因此,联合体大小是 8

联合体Un2:

  1. 最大对齐数是 4,最大成员大小是 14
  2. 如果联合体大小要能容纳最大成员大小,那么最大对齐数就是 16
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值