結構體的大小,內有對齊
#include <stdio.h>
struct A
{
int a;
int b;
}; //最後求得的位元組數是8
struct B
{
char a;
int b;
}; //最後求得的位元組數也是8(因為它浪費了三個位元組而提升了速度)
struct C
{
char a; //1+1 //由於1不是2的倍數,所以要加1
short b; //2 //由於2+1+1是4的倍數所以此處2不用再加
int c; //4
}; //最後求得的位元組數是 4+2+1+1=8
struct D //【記憶體對齊】
{
char a;
char x; //保留不使用
short b;
int c;
}; //最後求得的位元組數一直是8
struct E
{
short a; //2+2
int b; //4
long long *c ; //4 //看* 因為是指標所以是4
}; //最後求得的位元組數是2+2+4+4=12
struct F
{
char a; //1+3
int b; //4
short c; //2
}; //本來最後求得的位元組數是 1+3+4+2=10,(但是因為10不是4的倍數,所以需要10+2=12)
//【需要最後求得的位元組數是單個最大的成員的倍數
//(用圖中的解釋是因為結構體還可以定義陣列(當定義陣列時,藍色部分可以解決但是綠色部分的紅線處解決不了))
struct G
{
int a; //4
struct HH
{
char b; //1+3
int c; // 4
};
}; //最後求得的位元組數是12
struct H
{
int a; //4+4
int b; //8
}; //最後求得的位元組數是4+4+8=16
int main()
{
printf("%d\n",sizeof(struct A));
return 0;
}