C语言中如何计算结构体的大小

文章介绍了C语言中结构体的大小计算规则,基于成员中最大类型对齐的原则,通过几个实例展示了如何计算结构体占用的内存大小,例如考虑成员顺序和内存对齐等因素。

由于存储变量地址对齐的问题,计算结构体大小的3条规则:

  1. 结构体的大小由n个“结构体中最大的那个类型”的大小模块组成(n<=成员个数);
  2. 一个模块中,可以存储多个成员,前提是多个成员的大小不超过模块的存储的大小;
  3. 结构体中的成员按定义顺序存储。

下面通过例子来说明,我们可以通过sizeof()来计算大小。

sizeof(char)   = 1
sizeof(short)  = 2
sizeof(int)    = 4
sizeof(long)   = 4
sizeof(float)  = 4
sizeof(double) = 8

例1:

struct Str1
{
	char a;
	char b;
} str1;

struct Str1 str1;//sizeof(str1) = 2

在这里插入图片描述
结构体中最大成员大小是sizeof(char) = 1,所以str1的大小是1+1 = 2;

例2:

struct Str2
{
	char a;
	char b;
	int c;
} str2;

struct Str2 str2;//sizeof(str2) = 8

在这里插入图片描述

结构体内最大的成员大小是sizeof(int) = 4,按照顺序存储,所以str2的大小是4+4 = 8;

例3:

struct Str3
{
	char a;
	int c;
	char b;
} str3;

struct Str3 str3;//sizeof(str3) = 12

在这里插入图片描述
结构体内最大的成员大小是sizeof(int) = 4,按照顺序存储,所以str3的大小是4+4+4 = 12;

例4:

struct Str4
{
	char a;
	char b;
	int c;
	double d;
} str4;

struct Str4 str4;//sizeof(str4) = 16

在这里插入图片描述
结构体内最大的成员大小是sizeof(double) = 8,按照顺序存储,所以str4的大小为 8+8 = 16;

例5:

struct Str5
{
	char a;
	double f;
	char b;
	int c;
	double d;
} str5;

struct Str5 str5;//sizeof(str5) = 32

在这里插入图片描述
结构体中最大的成员大小是sizeof(double) = 8,按照顺序存储,所以str5的大小是8+8+8+8 = 32;

参考:https://blog.csdn.net/Surge_Pitt/article/details/109577614

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dzhuser

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值