自定義型別 聯合體知識點總結

2021-09-19 22:55:23 字數 1285 閱讀 1898

聯合體:和結構體形式差不多,都是包含一系列的成員。但是聯合體相較結構體來說有一點特殊就是:聯合體的所有成員共用一快記憶體空間。

//聯合體的宣告

union un;

union un un;//定義乙個聯合體變數

第乙個成員變數的位址跟聯合體的位址一樣,這點跟結構體類似。

聯合體的特點:成員共用乙個記憶體空間,這樣聯合體的大小,至少是最大成員的大小。

從我們可以看到聯合體的總大小為4。這是因為聯合體的成員共用乙個記憶體空間,而聯合體的大小就是聯合體裡面的最大成員的大小。而這個最大成員就是b,大小為4個位元組,所以結構體的大小就為4。

這個知識點在面試中也會出題,如:

union unun;

un.a = 0x11223344;

un.b = 0x55;

printf("%x\n",un.i);

算這道題之前我們首先要知道計算機在記憶體中是怎樣儲存的?也就是按大端還是小端儲存的?所以我們要先了解計算機的大小端儲存,我們用聯合體的知識寫一下這個**。

int islittleend()un;

un.b = 0x1;

if(un.a == 0x1)else

}

一般計算機是按小端位元組序來儲存的,所以我們來看上面這個題。

聯合體大小的計算

在這裡,聯合體的最大成員是乙個陣列,大小為10個位元組。最大對齊數為4(成員b的對齊數),所以聯合體的總大小就要為4的整數倍。而10不是4的整數倍,所以就要再補兩個位元組湊成4的整數倍,所以結果就為12。

自定義型別 結構體,列舉,聯合體

自定義型別 結構體,列舉,聯合體 結構體 結構體是一些值的集合,這些值成為成員變數,結構體的每乙個成員都可以是不同型別的變數。結構體的宣告 struct tagvariable list 例如描述乙個學生 struct stu 必須要有分號 結構體的成員 結構體的成員可以是標量 陣列 指標 甚至是其...

自定義型別知識點

1 結構體的宣告 在宣告結構體的,必須列出它包含是所有成員。這個列表包括每個成員的型別和名字。struct tag 結構體標籤 variable list 變數列表結構體標籤 允許為成員列表提供乙個名字,可以在後續的宣告中使用。標籤允許多個宣告使用同乙個成員列表,並且建立同一種型別的結構。這個宣告把...

C語言 自定義型別知識點總結

自定義型別部分知識。知識點 結構體型別建立 結構體初始化 結構體內存對齊 位段,位段計算機大小。列舉 聯合。1.結構體型別建立 struct stu 2.結構體初始化 struct student s struct student s 3.結構體內存對齊 對齊規則 3 結構體總大小為最大對齊數的整數...