c++primer plus复合类型之共用体

来源:互联网 发布:php下载文件代码 编辑:程序博客网 时间:2024/05/28 05:13

共用体(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:共用体常用于节省内存。


0 0