結(jié)構(gòu)和聯(lián)合有下列區(qū)別:
1. 結(jié)構(gòu)和聯(lián)合都是由多個(gè)不同的數(shù)據(jù)類型成員組成, 但在任何同一時(shí)刻, 聯(lián)合中只存放了一個(gè)被選中的成員, 而結(jié)構(gòu)的所有成員都存在。
2. 對(duì)于聯(lián)合的不同成員賦值, 將會(huì)對(duì)其它成員重寫, 原來(lái)成員的值就不存在了, 而對(duì)于結(jié)構(gòu)的不同成員賦值是互不影響的。
下面舉一個(gè)例了來(lái)加對(duì)深聯(lián)合的理解。
例4:
main()
{
union{ /*定義一個(gè)聯(lián)合*/
int i;
struct{ /*在聯(lián)合中定義一個(gè)結(jié)構(gòu)*/
char first;
char second;
}half;
}number;
number.i=0x4241; /*聯(lián)合成員賦值*/
printf("%c%c\n", number.half.first, mumber.half.second);
number.half.first='a'; /*聯(lián)合中結(jié)構(gòu)成員賦值*/
number.half.second='b';
printf("%x\n", number.i);
getch();
}
輸出結(jié)果為:
AB
6261
從上例結(jié)果可以看出: 當(dāng)給i賦值后, 其低八位也就是first和second的值;當(dāng)給first和second賦字符后, 這兩個(gè)字符的ASCII碼也將作為i 的低八位和高八位。
二、聯(lián)合變量的說(shuō)明
聯(lián)合變量的說(shuō)明和結(jié)構(gòu)變量的說(shuō)明方式相同, 也有三種形式。即先定義,再說(shuō)明;定義同時(shí)說(shuō)明和直接說(shuō)明。以perdata類型為例,說(shuō)明如下:





