介紹Union的定義
出處:datouyuan 發(fā)布于:2008-09-12 08:52:44
什么是聯(lián)合?
“聯(lián)合”是一種特殊的類,也是一種構(gòu)造類型的數(shù)據(jù)結(jié)構(gòu)。 在一個“聯(lián)合”內(nèi)可以定義多種不同的數(shù)據(jù)類型, 一個被說明為該“聯(lián)合”類型的變量中,允許裝入該“聯(lián)合”所定義的任何一種數(shù)據(jù),這些數(shù)據(jù)共享同一段內(nèi)存,已達到節(jié)省空間的目的(還有一個節(jié)省空間的類型:位域)。 這是一個非常特殊的地方,也是聯(lián)合的特征。另外,同struct一樣,聯(lián)合默認訪問權(quán)限也是公有的,并且,也具有成員函數(shù)。
聯(lián)合與結(jié)構(gòu)的區(qū)別?
“聯(lián)合”與“結(jié)構(gòu)”有一些相似之處。但兩者有本質(zhì)上的不同。在結(jié)構(gòu)中各成員有各自的內(nèi)存空間, 一個結(jié)構(gòu)變量的總長度是各成員長度之和(空結(jié)構(gòu)除外,同時不考慮邊界調(diào)整)。而在“聯(lián)合”中,各成員共享一段內(nèi)存空間, 一個聯(lián)合變量的長度等于各成員中長的長度。應(yīng)該說明的是, 這里所謂的共享不是指把多個成員同時裝入一個聯(lián)合變量內(nèi), 而是指該聯(lián)合變量可被賦予任一成員值,但每次只能賦一種值, 賦入新值則沖去舊值。
如何定義?
例如:
union test
{
test() { }
int office;
char teacher[5];
};
定義了一個名為test的聯(lián)合類型,它含有兩個成員,一個為整型,成員名為office;另一個為字符數(shù)組,數(shù)組名為teacher。聯(lián)合定義之后,即可進行聯(lián)合變量說明,被說明為test類型的變量,可以存放整型量office或存放字符數(shù)組teacher。
如何說明?
聯(lián)合變量的說明有三種形式:先定義再說明、定義同時說明和直接說明。
以test類型為例,說明如下:
1) union test
{
int office;
char teacher[5];
};
union test a,b; /*說明a,b為test類型*/
2) union test
{
int office;
char teacher[5];
} a,b;
3) union
{
int office;
char teacher[5];
} a,b;
經(jīng)說明后的a,b變量均為test類型。
a,b變量的長度應(yīng)等于test的成員中長的長度,即等于teacher數(shù)組的長度,共5個字節(jié)。a,b變量如賦予整型值時,只使用了4個字節(jié),而賦予字符數(shù)組時,可用5個字節(jié)。
如何使用?
對聯(lián)合變量的賦值,使用都只能是對變量的成員進行。
聯(lián)合變量的成員表示為:聯(lián)合變量名.成員名
例如,a被說明為test類型的變量之后,可使用a.class、a.office
不允許只用聯(lián)合變量名作賦值或其它操作,也不允許對聯(lián)合變量作初始化賦值,賦值只能在程序中進行。
還要再強調(diào)說明的是,一個聯(lián)合變量,每次只能賦予一個成員值。換句話說,一個聯(lián)合變量的值就是聯(lián)合變員的某一個成員值。
匿名聯(lián)合
匿名聯(lián)合僅僅通知編譯器它的成員變量共同享一個地址,而變量本身是直接引用的,不使用通常的點號運算符語法.例如:
#i nclude <iostream>
void main()
{
union{
int test;
char c;
};
test=5;
c=´a´;
std::cout<<i<<" "<<c;
}
正如所見到的,聯(lián)合成分象聲明的普通局部變量那樣被引用,事實上對于程序而言,這也正是使用這些變量的方式.另外,盡管被定義在一個聯(lián)合聲明中,他們與同一個程序快那的任何其他局部變量具有相同的作用域級別.這意味這匿名聯(lián)合內(nèi)的成員的名稱不能與同一個作用域內(nèi)的其他一直標志符沖突.
對匿名聯(lián)合還存在如下限制:
因為匿名聯(lián)合不使用點運算符,所以包含在匿名聯(lián)合內(nèi)的元素必須是數(shù)據(jù),不允許有成員函數(shù),也不能包含私有或受保護的成員。還有,全局匿名聯(lián)合必須是靜態(tài)(static)的,否則就必須放在匿名名字空間中。
上一篇:看看C#與Java相似之處的對比
下一篇:Union的問題解答
版權(quán)與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 工業(yè)5G技術(shù)在智能制造中的應(yīng)用與實踐解析2025/12/31 10:57:21
- 工業(yè)以太網(wǎng)交換機選型與現(xiàn)場應(yīng)用技術(shù)指南2025/12/18 10:48:14
- 無線傳輸電路基礎(chǔ),射頻前端設(shè)計、天線匹配與鏈路預(yù)算計算2025/10/27 13:55:50
- ASK 解調(diào)的核心要點與實現(xiàn)方式2025/9/5 16:46:17
- 雙偶極子天線:結(jié)構(gòu)、特性與應(yīng)用全解析2025/9/3 10:29:21









