一 、什么是联合体
在C语言中,变量的定义是分配存储空间的过程。一般的,每个变量都具有其独有的存储空间,那么可不可以在同一个内存空间中存储不同的数据类型(不是同事存储)呢?
答案是可以的,使用联合体就可以达到这样的目的。联合体也叫共用体,在C语言中定义联合体的关键字是union。
定义一个联合类型的一般形式为:
union 联合名
{
成员表
};
成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名
。其占用的字节数与成员中最大数据类型占用的字节数。
与结构体(struct)
、枚举(enum)
一样,联合体也是一种构造类型:
二、联合体变量的定义方法
方法一:先创建模板,再定义变量
// 创建联合体模板union perdata
union perdata
{
int Class;
char Office;
};
// 使用该联合体模板创建两个变量a, b
union perdata a,b;
方法二:同时创建模板和变量
// 创建联合体模板union perdata的同时定义两个变量a、b
union perdata
{
int Class;
char Office;
}a,b;
方法三:省略联合体名
union
{
int Class;
char Office;
}a,b;
相对于方法一与方法二,此处省略了联合体名。虽然更简洁了,但是因为没有了名字,后面就不能用该联合体定义新的变量
三 union的使用
对联合变量的赋值,使用都只能是对变量的成员进行。联合变量的成员表示为:
联合变量名.成员名
例如,a被声明为test类型的变量之后,可使用a.class、a.office。
不允许只用联合变量名作赋值或其它操作,也不允许对联合变量作初始化赋值,赋值只能在程序中进行。
还要再强调声明的是,一个联合变量,每次只能赋予一个成员值。换句话说,一个联合变量的值就是联合变员的某一个成员值。
四、联合体union的基本特性
union中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:
① 结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。
② 而联合体(union)中是各变量是“互斥”的——缺点就是不够“包容”;但优点是内存使用更为精细灵活,也节省了内存空间。