共用体
定义
用体(union)是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。也
就是说,结构可以同时存储int、long 和double,共用体只能存储 int、long或double。共用体的句法与结
构相似,但含义不同。例:
1 2 3 4 5
| union one4all { int int_val; long long_val; double double_val; };
|
具体使用
如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <iostream> #include "main.h" using namespace std;
union one4all { int int_val; long long_val; double double_val; };
int main() { one4all temp; temp.int_val = 10; cout << temp.int_val << endl; temp.double_val = 3.1415926; cout << temp.double_val << endl; cout << &temp.double_val << endl; cout << &temp.long_val << endl; cout << &temp.int_val << endl; system("pause"); return 0; }
|

为什么每次只能使用一个,直接打印地址可以发现,union
中变量共同使用一个地址,所以每次也只能存储一种类型的值。那么,共用体在什么时候才会用到呢?
《C++ primer 第六版》中给的定义是:
共用体的用途之一是,当数据项使用两种或更多种格式(但不会同时使用)时,可节省空间。
匿名共用体 (anonymous union)
没有名称的共同体,启程苑将成为位于相同地址处的变量。每次只有一个成员是当前的成员。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| struct worker { char name[20]; bool gender; union { long id_num; char id_char[20]; }; };
worker programmer; if(programmer.gender == 1) cout << programmer.id_num; else cout << programmer.id_char;
|
id_num
和id_char[20]
使用的还是同一个地址。使用中只需确定当前是哪个成员活动就行。
小结
共用体常用语节省内存。尤其是嵌入式系统编程,对内存要求较为严格。另外,共用体常用于操作系统数据结构或硬件数据结构。