由於教程上的看的還是不太懂,以下是自己總結的
共用體(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 它要用 覆蓋 技術,使多個變數互...