******************************************************************************************
結構體大小的計算方法:
1.結構體成員的偏移量必須是成員大小的整數倍(0被認為是任何數的整數倍)。
2.結構體大小必須是所有成員大小的整數倍。
******************************************************************************************
1.簡單結構體,sizeof(s1)=8
1 struct s1 2 { 3 char ch1;//1 4 char ch2;//2 5 int i;//8 6 };
2.簡單結構體(數據的順序改變了),sizeof(s2)=12
1 struct s2 2 { 3 char ch1;//1 4 int i;//8 5 char ch2;//12 6 };
3.成員包含數組的結構體,sizeof(s3)=20
1 struct s3{ 2 char ch;//1 3 int i;//8 4 char str[10];//20 5 };
4.成員包含結構體的結構體,sizeof(s4)=20
1 struct s4 2 { 3 char ch;//1 4 int i;//8 5 struct s 6 { 7 char ch1;//12 8 int j;//16 9 }; 10 11 float f;//20 12 };
5.成員包含聯合體的結構體,sizeof(s5)=12
1 struct s5 2 { 3 char ch;//1 4 int i;//8 5 union //聯合體大小就是成員中最大類型的大小 //12 6 { 7 char ch1; 8 int j; 9 }; 10 };
6.指定對齊值
(1)對齊值小於結構體成員最大值
1 #pragma pack(4) //指定向4對齊,最大是8 2 3 struct s6 4 { 5 char ch;//1 6 int i;//8 7 float f;//12 8 double d;//20 9 };
(2)對齊值大與結構體成員最大值
1 1 #pragma pack(10) //指定向10對齊,最大是8 2 2 3 3 struct s7 4 4 { 5 5 char ch;//1 6 6 int i;//8 7 7 float f;//12 8 8 double d;//24 9 9 };
******************************************************************************************