1.結構體struct大小計算
2.聯合體union大小計算
3.列舉體enum的大小計算
1.結構體struct大小計算
奉行兩個規則:
1.結構體中每個成員的偏移量必須是該成員自己所佔記憶體大小 的整數倍,否則,會用空白位元組填充。
2.當運用規則1 計算結構體大小完畢後,其結構體大小必須是 該結構體中最大的成員變數 的整數倍,否則會用空白位元組填充。
例子:
#include struct unknown ;
int main ()
運用規則1:
1.遇到變數a,其偏移量為0,變數大小為1
2.遇到變數b,其偏移量為0+1=1,變數大小為1
3.遇到變數c,其偏移量為1+1=2,變數大小為4,因為 2 不是 4 的整數倍,所以偏移量填充至4.
4.遇到變數d,其偏移量為4+4=8,變數大小為8。
5.遇到變數e,其偏移量為8+8=16,變數大小為1.
運用規則2:
運用規則1計算的結構體大小為17,又結構體最大的成員變數為8。而17 不是 8的整數倍,所以最終結構體大小為24
2.聯合體union大小的計算
奉行的兩個規則:
1.聯合體大小必須能容納聯合體中最大的成員變數
2.通過規則1 計算出的聯合體大小必須是 聯合體中佔記憶體大小最大的成員型別 的整數倍
例子:
typedef union u1u1;
typedef union u2u2;
typedef union u3u3;
三個聯合體 u1,u2,u3的大小分別是 8,8,6
u1:根據規則1,最大的成員變數是 a[6],其大小為 6.
根據規則2,最大的成員型別是 int ,其大小為 4。 6不是 4 的整數倍,因此6填充至8,所以其最終大小為 8
u2:根據規則1,最大的成員變數為 b,其大小為8.
根據規則2,最大的成員型別是 long,其大小為8, 因為 8 是 8 的整數倍,所以 其最終大小為8
u3:根據規則1,最大的成員變數為 a[6],其大小為6
根據規則2,最大的變數型別為 char,其大小為1,6是1的整數被,所以其最終大小為6
3.列舉體enum 的大小計算
列舉體enum的大小同 int 的大小一樣。都為4
結構體 聯合體 列舉
1 結構體struct 結構體的作用 在網路協議 通訊控制 嵌入式系統的c c 程式設計中,我們要傳送的不是簡單的位元組流 char型陣列 二是多種資料組合起來的乙個整體,其表現形式是乙個結構體。使用struct的注意事項 1 下面看乙個題目 結果 6 12 這裡涉及到結構體的記憶體對齊方式。1 關...
結構體 聯合體 列舉
結構體 1.宣告乙個結構體型別的一般形式為 struct 結構體名 成員表列 如 struct student 表示可選項 注 宣告不是定義,故不可對成員列表中的成員進行初始化。定義別名 方法一 如 struct 結構體名 typedef struct 結構體名 別名 方法二 如 typedef s...
C語言 結構體 聯合體 列舉 typedef
2 聯合體 共用體 3.列舉型別 4 typedef define crt secure no warnings include include include include include struct 結構體名 struct student stu intmain0201 struct stu...