共用体 定义:允许不同类型的数据使用同一段内存,即让不同类型的变量存放在起始地址相同的内存中。 (1)共用体类型定义 共用体类型定义的形式与结构体非常类似,其一段定义格式如下: union 类型标识符 { 共用体成员表 }; (2)共用体变量的定义 共用体类型定义后就可定义该类型的变量,其变量的定义和结构体变量的定义一样,有三种形式 注意 :不能在定义共用体类型变量是对其进行初始化。 (3)共用体变量的引用 共用体变量引用的一般形式为: 共用体变量.成员名 例如: union u { char a[4]; int i; long l; } struct s { int c; union U u; }m; 试分析变量m所占的内存字节数 解析如下: 结构体所占的内存字节数等于各个成员所占的字节数的总和,而共用体变量所占内存字节数是其中最长的成员所需要的字节数。而本例中的结构体中的变量m有两个成员,一个是整形变量c,它占两个字节,另一个是共用体变量u,它自己有三个成员,其中内存字节最长的成员变量1占四个字节,因此u所占的字节书为4。结构体变量m所占字节书为2+4=6. 例2: union mynu { struct {int x ,y, z;}u; int k; }a; int main() { a.u.x=4; a.u.y=5; a.u.z=6; a.k=0; printf("%d\n",a.u.x); } 解析: 本例中共用体类型mynu有两个成员:结构体成员u和整形成员k。结构体中有三个整形成员x、y、z,占用不同的存储空间。变量a.u.x与a.k首地址相同,根据共用体的赋值规则,a.k将覆盖a.u.x的值,因此输出a.u.x的值应该为a.k的值,即输出为0。