共用体(union)是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。也就是说,结构可以同时存储int、long和double,共用体只能存储int、long或double。

union one {
int int_val;
long long_val;
double double_val;
};

one变量用来存储int,long或double,共同体每次只能存储一个值因此它必须

有足够的空间来存储最大的成员,所以,共用体的长度为其最大成员的长度。

one pail;
pail.int_val = 15;
pail.double_val = 1.11;//int_val值丢失

共用体的用途之一是,当数据项使用两种或更多种格式(但不会同时使用)时,可节省空间。

假设设管理一个小商品目录,其中有一些商品的ID为整数,而另一些的ID为字符串。

struct widget {
char brand[20];
int type;
union {
long id_num;
char id_char[20];
} ;
};

widget prize;
.....
if(prize.type == 1)
prize.id_num=...;
else
prize.id_char=...;

结构体包含一个共同体,这个共同体可以存储整数或字符串,通过结构体.共同体变量.成员进行访问。

共同体可以是匿名的

struct widget {
char brand[20];
int type;
union id {
long id_num;
char id_char[20];
} id_val;
};

widget prize;
.....

if(prize.type == 1)
prize.id_val.id_num=...;
else
prize.id_val.id_char=...;

由于共用体是匿名的,因此id_num和id_char被视为prize的两个成员,它们的地址相同,所以不需要中间标识符id_val。