聯(lián) 合(union) 1. 聯(lián)合說明和聯(lián)合變量定義 聯(lián)合也是一種新的數(shù)據(jù)類型, 它是一種特殊形式的變量。 聯(lián)合說明和聯(lián)合變量定義與結(jié)構(gòu)十分相似。其形式為: union 聯(lián)合名{ 數(shù)據(jù)類型 成員名; 數(shù)據(jù)類型 成員名; ... } 聯(lián)合變量名; 聯(lián)合表示幾個(gè)變量公用一個(gè)內(nèi)存位置, 在不同的時(shí)間保存不同的數(shù)據(jù)類型和不同長度的變量。 下例表示說明一個(gè)聯(lián)合a_bc: union a_bc{ int i; char mm; }; 再用已說明的聯(lián)合可定義聯(lián)合變量。例如用上面說明的聯(lián)合定義一個(gè)名為lgc的聯(lián)合變量, 可寫成:
union a_bc lgc;
在聯(lián)合變量lgc中, 整型量i和字符mm公用同一內(nèi)存位置。 當(dāng)一個(gè)聯(lián)合被說明時(shí), 編譯程序自動(dòng)地產(chǎn)生一個(gè)變量, 其長度為聯(lián)合中最大的變量長度。 聯(lián)合訪問其成員的方法與結(jié)構(gòu)相同。同樣聯(lián)合變量也可以定義成數(shù)組或指針,但定義為指針時(shí), 也要用"->"符號(hào), 此時(shí)聯(lián)合訪問 成員可表示成:
聯(lián)合名->成員名
另外, 聯(lián)合既可以出現(xiàn)在結(jié)構(gòu)內(nèi), 它的成員也可以是結(jié)構(gòu)。 例如: struct{ int age; char *addr; union{ int i; char *ch; }x; }y[10];
若要訪問結(jié)構(gòu)變量y[1]中聯(lián)合x的成員i, 可以寫成:
y[1].x.i;
若要訪問結(jié)構(gòu)變量y[2]中聯(lián)合x的字符串指針ch的第一個(gè)字符可寫成:
*y[2].x.ch;
若寫成"y[2].x.*ch;"是錯(cuò)誤的。
2. 結(jié)構(gòu)和聯(lián)合的區(qū)別 結(jié)構(gòu)和聯(lián)合有下列區(qū)別: 1. 結(jié)構(gòu)和聯(lián)合都是由多個(gè)不同的數(shù)據(jù)類型成員組成, 但在任何同一時(shí)刻, 聯(lián)合中只存放了一個(gè)被選中的成員, 而結(jié)構(gòu)的所有成 員都存在。 2. 對于聯(lián)合的不同成員賦值, 將會(huì)對其它成員重寫, 原來成員的值就不存在了, 而對于結(jié)構(gòu)的不同成員賦值是互不影響的。 下面舉一個(gè)例了來加對深聯(lián)合的理解。 例4:
main() { union{ /*定義一個(gè)聯(lián)合*/ int i; struct{ /*在聯(lián)合中定義一個(gè)結(jié)構(gòu)*/ char first; |