一、问题
联合体又称之为共⽤体,声明⼀个共⽤体类型,必然要定义⼀个共⽤体类型的变量, 并对其赋初值。那么,如何为共⽤体变量赋初值呢?
二、解答
1. 联合体类型定义变量
定义联合体类型变量的⽅法与定义结构体类型变量的⽅法相同,定义联合体类型变量的⼀般形式为:
union 联合体名
{成员表列
} 变量表列;
举例说明定义联合体类型变量的形式,例如:
union number
{inti;char C;float f;
} m, n;
除了上述定义⽅法,还有两种定义变量的⽅法,与结构体类型定义变量的⽅法相同。
2. 联合体变量赋初值
只有先定义了联合体变量,才能引⽤联合体类型中的成员,不能引⽤联合体变量。
例如,上述代码中定义了 m 和 n 为联合体变量,则存在如下引⽤成员的⽅式:
m.i; /* 引⽤联合体变量中的整型变量讲 */
m.c; /* 引⽤联合体变量中的字符型变量 c */
m.f; /* 引⽤联合体变量中的浮点型变量 f */
由于联合体变量具有所有成员共享⼀个内存地址的特点,因此为联合体变量赋初值时只能给该变量的第⼀个成员赋初值,其他成员不能赋初值。例如:
union number
{int i;char C;float f;
} m = {2};
为联合体变量 m 中的整型变量 i 赋初值为 2 。
三、总结
联合体的声明形式与结构体类型相似,但它们实质上是存在很⼤不同的。结构体类否所占内存空间是各个成员变量所占空间之和,⽽联合体类型所占的内存空间是成员变量中内存最⼤的⼀个变量的内存,所有成员变量共⽤⼀个内存。