关于结构体,联合体,位字段的大小的

	struct A
	{
		int a;
		short b;
		int d;
		char c;
		union 
		{
			int g;
			int ar[3];
			double f;
		};
	};
	struct B
	{
		int a;
		short b;
		struct 
		{
			char e;
			int f;
		};
		char c;
		int d;
	};
	struct C
	{
		int a;
		char arr[20];
		char b;
		int c;
		float d;
		char brr[30];
	};
	struct D
	{
		int a : 8;
		char b : 7;
	};

int main()
{
	//结构体大小:上面所有变量的字节数的总和必须为下面变量字节的倍数;总的大小必须是单个最大元素的倍数。
	//printf("%d\n", sizeof(A));//4,2+2->4,4,1+3->4 》16   union的:最大的成员为 int ar[3],3*4->12个字节,然后需要整除单个最大元素(double),所以就为16字节了
	//printf("%d\n", sizeof(B));// 4,2,1+1->2,4 》12   带内嵌结构体的(先算内嵌里的):4,2+2->4,1+3->4,4,1+3->4,4 》24
	//printf("%d\n", sizeof(C));//4,20,1+3->4,4,4,30+2 》68
	//printf("%d\n", sizeof(D));//同类型的,位数相加然后除8,然后得到字节数(如果结果是小数,向上取整),然后往上凑,是此类型大小(char 1  int 4...)的倍数就行。8+32->40 40/8->5 5+3->8 所以,为8个字节。不同类型的,直接按照正常结构体算.

	return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值