在C語言中,允許幾種不同類型的變量存放到同一段內(nèi)存單元中,也就是使用覆蓋技術(shù),幾個(gè)變量互相覆蓋。這種幾個(gè)不同的變量共同占用一段內(nèi)存的結(jié)構(gòu),被稱為共用體類型結(jié)構(gòu),簡稱共用體。一般定義形式為:
union 共用體名 { 數(shù)據(jù)類型 成員名 1; 數(shù)據(jù)類型 成員名 2; ...... 數(shù)據(jù)類型 成員名 n; }變量名表列;
只有先定義了共用體變量,才能在后續(xù)的程序中引用它。不能直接引用共用體變量,而只能引用共用體變量中的成員。引用方法如下:
共用體變量名.成員名
共用體類型數(shù)據(jù)具有以下特點(diǎn):
(1)同一個(gè)內(nèi)存段可以用來存放幾種不同類型的成員,但是在每一瞬間只能存放其中的一種,而不是同時(shí)存放幾種。換句話說,每一瞬間只有一個(gè)成員起作用,其他的成員不起作用,即不是同時(shí)都存在和起作用的。
(2)共用體變量中起作用的成員是最后一次存放的成員,在存入一個(gè)新成員后,原有成員就失去作用。共用體變量的地址和它的各成員的地址都是同一地址。
#include<stdio.h> union INFO { int a; int b; int c; }; int main() { union INFO A; A.a=1; A.b=2; A.c=3; printf("a:%d\n",A.a); printf("b:%d\n",A.b); printf("c:%d\n",A.c); return 0; }
運(yùn)行結(jié)果如下:
a:3 b:3 c:3
不能對共用體變量名賦值,也不能企圖引用變量名來得到一個(gè)值,并且,不能在定義共用體變量時(shí)對它進(jìn)行初始化。
不能把共用體變量作為函數(shù)參數(shù),也不能是函數(shù)返回共用體變量,但可以使用指向共用體變量的指針。共用體類型可以出現(xiàn)在結(jié)構(gòu)體類型的定義中,也可以定義共用體數(shù)組。反之,結(jié)構(gòu)體也可以出現(xiàn)在共用體類型的定義中,數(shù)組也可以作為共用體的成員。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程