C語言結構體,聯合體,列舉體的大小計算

2021-08-16 08:10:43 字數 1275 閱讀 8636

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...