C C 聯合體詳解

2021-08-14 05:10:19 字數 920 閱讀 2012

**如下:

typedef

union

st;}un;

int main()

執行結果是13

1)注意聯合體的定義,就是組成聯合體的變數共用乙個空間。這個 例子中變數u和st共用乙個空間

2)現在用的pc機大多為小段結構,我的結果13也是在小段機測試的,如果架構改變,結果可能不同

3)基於小段結構,資料的低位元組儲存在記憶體的低位址中,st占用9位(bit),與變數u(32bit)共用低位的9位

4)根據小段結構,變數a的位址應該最低,往後依次是b,c,d

5)un.u = 0; 執行這一步,變數所對應的空間二進位制全部為0,即00000000 00000000 00000000 00000000

6)un.st.a = 1;執行這一步,變數最後一位變化,即00000000 00000000 00000000 00000001

7)un.st.b = 2;執行這一步,由於1位空間無法儲存2,所以賦值被截斷,原值不變

8)un.st.c = 3;執行這一步,變數第3-8位發生變化,變數值變為00000000 00000000 00000000 00001101

9)un.st.d = 4;執行這一步,由於1位空間無法儲存4,所以賦值被截斷,原值不變

10)所以最終的結果就是00000000 00000000 00000000 00001101

11)printf(「%d\n」, un.u); 輸出結果就是13

unsigned char a :1;這種定義方式,是按位進行定義的,即a只占用乙個位,同樣b和d都只占用一位,所以如果這三個變數你賦值大於1的話,則自動被截斷為1位,即除了低1位有效之外,其它高位的全部被丟棄。按位定義的,和這個變數的型別相關性不是很大,所以不是說a被定義成char就是8位。

聯合體詳解

在c c 程式的編寫中,當多個基本資料型別或復合資料結構要占用同一片記憶體時,我們要使用聯合體 當多種型別,多個物件,多個事物只取其一時 我們姑且通俗地稱其為 n 選1 我們也可以使用聯合體來發揮其長處。首先看一段 union型別是共享記憶體的,以size最大的結構作為自己的大小,這樣的話,myun...

union聯合體使用詳解

1.聯合體 聯合體 union 與結構體 struct 有一些相似之處。但兩者有本質上的不同。在結構體中,各成員有各自的記憶體空間,乙個結構變數的總長度是各成員長度之和。而在聯合體中,各成員共享一段記憶體空間,乙個聯合變數的長度等於各成員中最長的長度。應該說 明的是,這裡所謂的共享不是指把多個成員同...

union聯合體使用詳解

1.聯合體 聯合體 union 與結構體 struct 有一些相似之處。但兩者有本質上的不同。在結構體中,各成員有各自的記憶體空間,乙個結構變數的總長度是各成員長度之和。而在聯合體中,各成員共享一段記憶體空間,乙個聯合變數的長度等於各成員中最長的長度。應該說 明的是,這裡所謂的共享不是指把多個成員同...