結(jié)構(gòu)和聯(lián)合有下列區(qū)別:
1. 結(jié)構(gòu)和聯(lián)合都是由多個不同的數(shù)據(jù)類型成員組成, 但在任何同一時刻, 聯(lián)合中只存放了一個被選中的成員, 而結(jié)構(gòu)的所有成員都存在。
2. 對于聯(lián)合的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對于結(jié)構(gòu)的不同成員賦值是互不影響的。
下面舉一個例了來加對深聯(lián)合的理解。
例4:
main()
{
union{ /*定義一個聯(lián)合*/
int i;
struct{ /*在聯(lián)合中定義一個結(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é)果可以看出: 當給i賦值后, 其低八位也就是first和second的值;當給first和second賦字符后, 這兩個字符的ASCII碼也將作為i 的低八位和高八位。
二、聯(lián)合變量的說明
聯(lián)合變量的說明和結(jié)構(gòu)變量的說明方式相同, 也有三種形式。即先定義,再說明;定義同時說明和直接說明。以perdata類型為例,說明如下:





