C_联合体

本文详细解读了联合体在C++中的大小计算,通过代码实例说明联合体大小并非最大字段直接决定,而是考虑了数据对齐。重点介绍了如何根据最大字段和对齐规则确定实际大小,并揭示了为什么在给定代码中usr的大小为12字节而非10字节。
摘要由CSDN通过智能技术生成

联合体的大小

一,联合体大小测试代码

#include<stdio.h>
#include <string>
using namespace std;
//联合体实现
union usr {
	char name[10];
	int age;
};
int main() {
	usr u1;//联合体实例化
	char t1[10];
	int t2;

	printf("sizeof(usr)=%d\n",sizeof(usr));
	printf("sizeof(u1)=%d\n", sizeof(u1));
	printf("sizeof(t1)=%d\n", sizeof(t1));
	printf("sizeof(t2)=%d\n", sizeof(t2));


	return 0;
}

代码执行结果如下所示;
在这里插入图片描述

二,联合体的性质:

1:联合体的大小等于其最大字段的大小;
在上面的代码示例中,联合体usr包含两个字段name和age,其中char类型的name字段大小为10字节,int类型的age字段大 小为4字节。按照联合体大小的规定,那么usr的大小应该输出为10.但是结果却是12.这就涉及到数据对齐的知识了。接下来我们先简单说一下在联合体的大小该如何计算;

2:联合体大小计算:
A:先找出最大字段的大小,例如示例代码中的最大字段应该是char数组,大小为10字节;
B:找出最大对齐数(除最大字段外最大的字段)age,其大小为4字节;
C:查看最大字段的值是否为最大对齐数的整数倍,如果是,则联合体大小最大字段的大小;如果不是,则联合体大小为最大对齐数的整数倍;代码示例中最大对齐数为4,最大字段大小10不是4的整数倍。所以其大小为3X4=12;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值