共用体是一种特殊形式的变量,使用关键字union来定义。
共用体(有些人也叫"联合")声明和共用体变量定义与结构体十分相似。其形式为:
union 共用体名{
数据类型 成员名;
数据类型 成员名;
...
} 变量名;
共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。
下例表示声明一个共用体foo:
1
2
3
4
5
6
|
union
foo{
/*“共用”类型“FOO”*/
int
i;
/*“整数”类型“i”*/
char
c;
/*“字符”类型“C”*/
double
k;
/*“双”精度类型“K”*/
};
|
当一个共用体被声明时, 编译程序自动地产生一个变量, 其
长度为联合中类型字节数最多的变量的类型长度的整数倍。以上例而言,最大长度是double数据类型,所以foo的内存空间就是double型的长度。
1
2
3
4
5
|
union
foo{
/*“共用”类型“FOO”*/
char
s[10];
/*“字符”类型的数组“S”下面有“10”个元素*/
int
i;
/*“整数”类型i*/
};
|
在这个union中,foo的内存空间的长度为12,是int型的3倍,而并不是数组的长度10。若把int改为double,则foo的内存空间为16,是double型的两倍。
共用体和结构体有下列区别:
1. 共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放了一个被选中的成员, 而结构体的所有成员都存在。
2. 对于共用体的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。