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

猜你喜欢

转载自blog.csdn.net/qq_44678607/article/details/130506639