代码 1:-
struct emp
{
char a;
double b;
};
int main()
{
struct emp e;
printf("%p %p", (void*)&e.a, (void*)&e.b);
}
在我的电脑上输出:-
OO28FF00 0028FF08
由于 和 的大小分别char
是double
“1”和“8”,因此0028FF00
和分别是“1”和“8”0028FF08
的倍数。
代码 2:-
struct emp
{
char a;
long double b;
};
int main()
{
struct emp e;
printf("%p %p \n", (void*)&e.a,(void*)&e.b);
}
输出是: -
0028FF00 0028FF04
char
因为和的大小分别long double
是 '1' 和 '12' 但0028FF04
不是 '12' 的倍数。
为什么在这种情况下不应用填充?