共用體同結構體的定義形式上相同,只是把關鍵字struct改為union。
有時需要把幾種不同型別的變數放在同有一記憶體區域中,見圖12-6,把乙個整型變數,乙個字元變數,乙個實型變數放在同一記憶體區域中,儘管三個變數占用位元組數各不相同,但起始位址都一樣(例如1000)它要用「覆蓋』』技術,使多個變數互相覆蓋。這種結構稱為共同體或者聯合。
定義共用體方式類似結構體。
例如:union data 或union 或union data
a,b,c; }a,b,c; };
union data a,b,c;
「共用體」和「結構體」定義形式相似,但其含義不同。結構體變數所佔記憶體長度是各成員的記憶體之和(如圖13-6為七個位元組),但共用體變數所佔記憶體長度是最長成員的長度(如圖13-6中為4個位元組)。
12.6.2引用方式
先定義共用體變數後才可以引用它。不能引用共用體變數本身。而只能引用其中的成員。例如:printf(″%d″,a);是錯誤的,printf(″%d″,a.i);是正確的。
例12-10
main()
t;t.uint=3;printf(″%d\n″,t.uint);
t.tlong=300;printf(″%1d\n″,t.tlong);
t.tfloat=3.0;printf(″%f\n″,t.tfloat);
t.tdouble=3.00;printf(″%f\n″,t.tdouble);
t.tstring=″stu″;printf(″%s\n″,t.tstring);
}12.6.3共用體的特點
(1)同一記憶體段可放幾種不同型別的成員,但每一瞬間只能存放一種。例如:
a.i=1;
a.c=′a′;
a.f=2.1;
在完成以上三個運算後,只有a.f是有效的,a.i及a.c都不再有效,因此用printf(″%f″,a.f);是可以的。但不能用printf(″%c″,a.c);,所以引用共同體變數時應該特別注意當前放的是什麼資料。
(2)共用體變數位址及其各成員位址都是同一位址。即&a,&a.i,&a.c,&a.f值相同。
(3)不能對共用體變數名賦值。也不能定義時進行初始化。
(4)不能把共用體變數作為函式引數,也不能使函式返回共同體變數,但可以使用指向共用體的指標。
(5)允許定義共用體陣列。
共用體詳解
4.總結 在進行某些演算法的c語言程式設計的時候,需要使幾種不同型別的變數存放到同一段記憶體單元中。也就是使用覆蓋技術,幾個變數互相覆蓋。這種幾個不同的變數共同占用一段記憶體的結構,在c語言中,被稱作 共用體 型別結構,簡稱共用體,也叫聯合體。定義共用體型別變數的一般形式為 union 共用體名 變...
結構體 共用體
結構體 結構體的定義1 struct mystruct 定義新變數 struct mystruct s1 結構體定義2 typedef struct mystruct mstrct 定義新變數 mstrct s1 結構體定義3 type struct mstrct 定義新變數 mstrct s1 共...
共用體練習
給定n和m,接下來有n個描述,每個描述包含乙個型別標誌和一組相應的資料。型別標誌共3種 int double string,然後對應一組相應的資料。緊接著有m個詢問,每個詢問僅包含乙個整數x,要求輸出第x個描述對應的資料 string型別保證不含空格,每組對應string資料不會超過19個字元 輸入...