2.1.3 构造数据类型(5)
定义了一个共用体类型union gy,它由3个成员组成,这3个成员在内存中使用共同的存储空间。由于共用体中各成员的数据长度不同,所以共用体变量在存储时总是按其成员中数据长度最大的成员占用内存空间。如上述共用体类型union gy的变量占用4个字节的内存。
在这一点上共用体与结构体不同,结构体类型变量在存储时总是按各成员的数据长度之和占用内存空间。
例如,定义了一个结构体类型:
- struct gy
- {
- int i;
- char c;
- float f;
- };
则结构体类型struct gy的变量占用的内存为2+1+4=7个字节。
2) 定义共用体类型变量的方法
定义共用体类型变量的方法与定义结构体类型变量的方法相似,也有3种方法:
- {
- 成员表列;
- }变量表列;
例如:
- union gy
- {
- int i;
- char c;
- float f;
- }a,b,c
(2) 将共用体类型定义与共用体变量定义分开
- union gy
- {
- int i;
- char c;
- float f;
- };
- union gy a,b,c;
(3) 直接定义共用体变量
- union
- {
- int i;
- char c;
- float f;
- }a,b,c;
上面几种方法都是定义了一个共用体类型,又定义了几个共用体类型变量a、b、c。
3) 共用体变量的使用形式
由于共用体变量的各个成员使用共同的内存区域,所以共用体变量的内存空间在某个时刻只能保持某个成员的数据。由此可知,在程序中参加运算的必然是共用体变量的某个成员,而不能直接使用共用体变量。共用体变量成员的表现形式与结构体相同,也使用访问成员运算符.和->表示。
例如,前面定义了a、b、c为共用体类型变量,下面的使用形式是正确的。
- a.i //引用共用体变量中的整型变量i
- a.c //引用共用体变量中的字符变量c
- a.f //引用共用体变量中的实型变量f
不能只引用共用体类型变量,例如:cout<<a是错误的,a的存储区有好几种类型,分别占不同长度的存储区,仅写共用体类型变量名a难以使系统确定究竟输出的是哪一个成员的值。应该写成cout<<a.i或者cout<<a.c等。
在使用共用体类型变量的数据时要注意的是,在共用体类型变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。如有以下赋值语句:
- a.i=1;
- a.c='a';
- a.f=1.5;