由于存储变量地址对齐的问题,计算结构体大小的3条规则:
- 结构体的大小由n个“结构体中最大的那个类型”的大小模块组成(n<=成员个数);
- 一个模块中,可以存储多个成员,前提是多个成员的大小不超过模块的存储的大小;
- 结构体中的成员按定义顺序存储。
下面通过例子来说明,我们可以通过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