7.10面试葵花宝典之结构体大小的计算方式

本文详细介绍了如何在C语言中计算结构体大小,包括成员偏移量的要求、整数倍对齐原则,并通过实例展示structs1到structs7的内存布局。

7.10面试葵花宝典之结构体大小的计算方式

#include<stdio.h>
#include<stdlib.h>
#include <string.h>

	/*	7.9
	author:edcfreedom
	date:2021/8/27
	funDescription:
	结构体的大小如何计算
	计算结构体大小的方式
	1.结构体成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍);
	2.结构体大小必须是所有成员大小(数组除外)的整数倍
	3.对其方式很浪费空间,确实;可是按照计算机的访问规则,这种对其方式提升了效率
*/

struct s1{
	char ch1;//1
	char ch2;//1
	int i;	//4	遵循结构体运算法则第一条,偏移量必须是当前成员的大小整数倍,逻辑偏移2 实际按照对其的规则,要偏移4
};

struct s2{
	char ch1;	//1 {} {}{}{} {}{}{}{}
	int i;		//4+3
	char ch2;	//1   9 ? 12
};

struct s3{
	char ch;	//1
	int i;		//4 3
	char str[12];//10  20
};

struct s4{
	char ch;	//1
	int i;		//4 3
	struct s{	//8
		char ch1;	//1
		int j;		//4 3
		double d;
	}stmp;
	float f;	//20  32
};

struct s5{
	char ch;
	int i;
	union{
		char ch1;
		int j;
	};
};
//#pragma pack(4)//指定向4对其,最大是8,如果成员的大小超过了pack要求的,就按pack来对齐,如果最大成员大小没有超过pack,就按最大成员来对齐
struct s6{
	char ch;
	int i;
	float f;
	double d;
};

#pragma pack(10)//

struct s7{
	char ch;
	int i;
	float f;//12
	double d;//20
};

int main()
{
	printf("char:%d\n",sizeof(char));
	printf("float:%d\n",sizeof(float));
	printf("int:%d\n",sizeof(int));
	printf("double:%d\n",sizeof(double));
	
	printf("s1:%d\n",sizeof(struct s1));
	printf("s2:%d\n",sizeof(struct s2));
	printf("s3:%d\n",sizeof(struct s3));
	printf("s4:%d\n",sizeof(struct s4));
	printf("s5:%d\n",sizeof(struct s5));
	printf("s6:%d\n",sizeof(struct s6));
	printf("s7:%d\n",sizeof(struct s7));
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值