共用体(union)是一种数据格式,它能够存储不同的数据类型,但只能存储其中的一种类型。也就是说,结构可以同时存储int,long和double,而共用体只能存储int,long或double。共用体与结构体形式相同,但含义不同。例如,
1:共用体的声明
union one4all { int int_val; long long_val; double double_val; };可以使用one4all类型的变量来存储int,long或double,条件是在不同的时间进行,例如:
one4all pail; pail.int_val=15; cout<<pail.int_val; pail.double_val=1.38; cout<<pail.double_val;pail有时候是int变量,而有时可以是double变量,成员名称标识了变量的容量。由于共用体每次只能存储一个类型的变量,因此,它必须要有足够的存储空间来存储容量最大的数据成员,所以共用体的长度是它最大成员的长度。
2:匿名共用体
匿名共用体没有名称,其成员将成为位于相同地址处的变量。显然,每次只有一个成员是当前成员。例如,
struct widge { char name[20]; int type; union { long long_vat; char char_val[20]; }; }; ... widge pirze; ... if(prize.type==1) {cin>>prize.long_val;} else {cin>>prize.char_val;}由于共用体是匿名的,因此long_val和char_val被视为prize的两个成员变量,他们的地址相同,由程序员决定当前哪个成员是活动的。
3:共用体常用于节省内存。