这个问题以前纠结了好长时间,最近才明白了,以一个我回复的帖子作为例子描述出来。
struct st
{
int a;
char c;
double b;
char d;
int e;
};
struct st2
{
st b;
char a;
};
cout << sizeof(st2) << endl;
为什么结果为32呢?
解析:
1、结构体中变量开始地址是变量字节数整数倍
2、结构体以占用字节数最大的类型长度为基本长度
3、结构体占用总字节数是基本长度的整数倍
先计算st1
struct st
{
int a; //长度为4,开始地址为0,是长度整数倍,占用地址0,1,2,3
char c; //长度为1,开始地址为4 ,是长度整数倍,占用地址4
double b; //长度为8,开始地址为5 ,不是整数倍,补齐地址5,6,7,占用地址8.。。。。15
char d;//长度为1,开始地址为16,是长度整数倍,占用地址16
int e;//长度为4,开始地址为17,不是长度整数倍,补齐地址17,18,19,占用地址20,21,22,23
}总长度24,是基本长度8的整数倍
struct st2
{
st b;//占用地址0到23,基本长度为8
char a;//长度为1,开始地址为24,是长度整数倍,占用地址24
};
总长度25,不是基本长度整数倍,补齐地址25到31,总长度为32