(五十三)共用體

2021-09-23 23:27:33 字數 1690 閱讀 9004

由於教程上的看的還是不太懂,以下是自己總結的

共用體(union)又稱聯合體,特點是

①乙個共用體之下有多個變數,

②且同時只能存在乙個,

③且後面進行賦值的會覆蓋前面的,

④且只能使用int、char、double三種變數,

可以使用多種變數,任何 int(包括 char),任何浮點型別,(float,double,long double),以及指標

union,struct,以及 以上型別的 陣列 作為他的成員

。但必須讓使用者自己寫乙個

constructor否則無法正常生成這個union的物件。

⑤且共用同一塊記憶體(這也是後面會覆蓋前面的原因),

⑥形式類似結構

標準格式為:

union 共用體名

; 共用體名 使用該共用體的共用體變數名;

共用體變數名.共用體內其中乙個型別的變數名 = 值; //給共用體賦值

上**:

#includeusing namespace std;

int main()

; system("pause");

return 0;

}

①根據實際測試,char型別不能用字串(即像char b[10];這樣在編譯的時候會出問題);

②只能用int、char、double,其他型別不可以;

③定義和宣告的形式,類似結構;

④共用體只能儲存乙個字元,如果儲存多個字元,會出問題,例如之後的輸入被跳過(因為儲存空間溢位);

⑤共用體雖然可以變換為三種形式,但一次只能顯示其中一種,如果想輸入另外一種,那麼前一種就會被覆蓋(即再也呼叫不出來,就算呼叫,也呼叫的是錯誤的);

⑥共用體可以用在結構之中,如**:

#include#includeusing namespace std;

struct abc //定義結構abc;};

int main()

; //宣告gtt結構, 採用abc結構的形式,並初始化第乙個成員的值為「數值」

gtt.b = 1; //初始化gtt結構的第二個成員,並且第二個成員採用共用體的第乙個成員int型別

cout << gtt.a << endl; //輸出結構的第乙個成員

cout << gtt.b << endl; //輸出結構的第二個成員(且格式為共用體第乙個成員的型別)

gtt.c = 1.11; //覆蓋gtt結構的第二個成員的值,並且採用的格式為共用體第二個成員的double型別

cout << gtt.c << endl; //輸出結構第二個成員的值(且格式為共用體第二個成員的型別)

system("pause");

return 0;

}

輸出結果為:

數值

11.11

我們可以從**中看到,採用共用體時,共用體不同的成員(型別)需要使用不同的變數名,然後在初始化時,使用 結構名.共用體成員變數名 這種形式進行初始化,類似使用結構時的 結構名.結構成員變數名 這種形式。

(注:這次在union 後面直接是大括號,沒有名字,使用的是匿名共用體的形式,和共用比相比,在引用的時候,可以不用寫共用體的名,且匿名共用體的兩個成員,認為是結構的兩個成員——雖然同時只能存在乙個)

谷底蒺藜 五十三

天鵝和地鴨 乙個風和日麗的下午,村子裡乙個窮戶人家的鴨子步履蹣跚地走到了村邊的河畔,河畔是很大的一片蘆葦蕩,蘆葦蕩裡邊有著一灘一灘的溝溝汊汊,裡邊遊弋著大大小小的魚蝦。鴨子很孤獨,窮戶只是一對相依為命的奶奶和孫女,孫女的爸爸媽媽長年在外打工,奶奶多病,孫女念著小學,鴨子的吃食是有這頓沒那頓的。鴨子卻...

結構體 共用體

結構體 結構體的定義1 struct mystruct 定義新變數 struct mystruct s1 結構體定義2 typedef struct mystruct mstrct 定義新變數 mstrct s1 結構體定義3 type struct mstrct 定義新變數 mstrct s1 共...

共用體詳解

共用體同結構體的定義形式上相同,只是把關鍵字struct改為union。有時需要把幾種不同型別的變數放在同有一記憶體區域中,見圖12 6,把乙個整型變數,乙個字元變數,乙個實型變數放在同一記憶體區域中,儘管三個變數占用位元組數各不相同,但起始位址都一樣 例如1000 它要用 覆蓋 技術,使多個變數互...