C語言基礎專題 通過案例曆學 共用體

2021-10-16 04:26:33 字數 1352 閱讀 4677

本文通過例項介紹了c語言中共用體的概念與使用

答:共用體是c語言中一種使用者自定義資料型別,它提供了一種使用相同的記憶體位置的有效方式。其特點是:

可以定義乙個帶有多成員的共用體,但是任何時候只能有乙個成員帶有值。

#include

#include

// 先定義公用體,其定義形式與結構體類似,只不過關鍵字從struct變成了union

union

stdt1;

intmain()

執行結果:

姓 : 

名 :

性別 :

年齡 : 17

--------------------------------

process exited after 0.008393 seconds with return value 0

請按任意鍵繼續. . .

我們發現在上述程式執行中,只有stdt1.age的值是正常的,而其它的都發生了錯誤,然而在struct所定義的結構體中卻沒有出現這樣的情況!其原因為:

共用體中最後賦給變數的值占用了記憶體位置

作為比較,我們再看下例:

#include

#include

union

stdt1;

intmain()

執行結果:

姓 : 李

名 : 華

性別 : 男

年齡 : 17

--------------------------------

process exited after 0.00925 seconds with return value 0

請按任意鍵繼續. . .

可以看到,這裡卻正常輸出了共用體中所有變數的值!

但這並不意味著這些值在同一時刻都是我們預期所看到的,相反,只不過是這次我們調整了呼叫printf()函式的順序,使得printf()函式在同一時間只用到乙個成員,並且這個成員正好是最後被賦值的那個成員。因此這裡的本質問題就在於:

共用體中的所有成員變數,他們使用的是同一記憶體位置。每次對其中任一變數賦值都改變的是該同一記憶體位址的儲存內容。

最後共用體特點歸納如下:

C語言之共用體基礎 防備忘

注 共用體變數所佔的記憶體長度等於最長的成員的長度 幾個成員變數共同占用同一段記憶體 共用體用來做什麼?微控制器中資料傳送的時候,占用同一片位址,進行資料傳送,十分方便 1.共用體定義 eg typedef union student stu 2.共用體巢狀結構體 eg typedef struct...

C語言基礎 結構體 共用體 列舉

struct 結構名 例 struct student 定義一種結構體型別 第一種方式 struct 結構名 變數名 例 struct student sam 定義struct student型別變數sam 注意struct student 結構體型別已經宣告定義,才能這麼使用 上面 2.宣告結構體...

小白學C語言基礎2

語句 1.順序執行語句 2.分支選擇語句 條件成立則執行 if 二者執行其一 if else 多種情況 if else if else if 多種情況擇其一 if else if else if else if注意事項 i 如果分支語句只有一條語句時 可以省略 但是不建議省略 ii if condi...