C语言-自定义类型3

联合体

联合体的定义

联合体是一种特殊的自定义类型,这种类型定义的变量也包含着许多成员(类型可以不同),特点是这些成员共用着同一块内存空间。
例如:

union My       //定义联合体类型
{
    
    
	char c;
	int i;
};
union My   un;    //定义联合体变量

int main()
{
    
    
	printf("%zd\n", sizeof(un));     //计算联合体变量大小
	return 0;
}

联合体的特点

联合体的成员是共用同一块内存空间的,即联合体的大小至少是最大成员的大小。

union Un
{
    
    
	char a;
	int i;
}un;
int main()
{
    
    
	printf("%p\n", &(un.a));    //查看一下两个成员的地址
	printf("%p\n", &(un.i));

	return 0;
}

在这里插入图片描述
由此也验证了,它门共用的是同一块内存空间。

联合体大小的计算

  • 联合体大小至少是最大成员的大小
  • 当最大成员的大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍。
    例如:
union Un1
{
    
    
	char c[5];     //最大成员是5,最大对齐数是四,所以对齐到8
	int i;
};
union Un2
{
    
    
	short c[7];      //最大成员是14,最大对齐数是4,所以对齐到16
	int i;
};
int main()
{
    
    
	printf("%zd\n", sizeof(union Un1));
	printf("%zd\n", sizeof(union Un2));

	return 0;
}

在这里插入图片描述

使用案例

int daxiao()
{
    
    
	union Un
	{
    
    
		char a;     //一个字节
		int i;      //四个字节
	}un;
	un.i = 1;
	return un.a;

}
int main()
{
    
    
	int ret = daxiao();
	if (ret)
		printf("小端");
	else
		printf("大端");
	return 0;
}

在这里插入图片描述
在这里插入图片描述
读取的第一个字节是一就是小端存储,是0就是大端存储。

猜你喜欢

转载自blog.csdn.net/st200112266/article/details/127280522