c语言联合简介


一、联合简介

在c语言中,不同数据类型的数据可以使用共同的存储区域,这种数据构造 类型称之为联合类型(联合)。

二、联合的定义

联合的定义形式:
union 名称{
数据类型 成员名1;
数据类型 成员名2;
数据类型 成员名3;
};
在定义个联合类型时,需指定组成联合名及成员项的数据类型 成员名。
当我们定义一个联合体时,我们只是告诉编译器,我们现在拥有了一个新的联合类型,以及内存的使用模式及内存大小。
例:
union lianHe{
int a1; //占用4字节
char a2; //占用1字节
long int a3; //占用8字节
};
union lianHe a,*b,c[20]; //分别定义一个联合体 一个联合指针 一个联合数组
//从以上联合的定义和根据联合的内存使用规则我们可以看出,联合所占用的内存字节为8。

由于联合采用的模式是:联合中的成员项共用内存区域。
1 联合体分配内存时,取最大成员项所占用的内存大小作为联合的sizeof的值,
2 联合体中,内存在某一时刻,只可以保存某一个成员项的数据,所以联合体中参与运算必须为成员项。


联合和结构的定义可以相互嵌套使用。
例:
union t{char a;int b;};
struct t2{char c;int c2;union t c3;};// 结构体中嵌套联合体


三、联合与结构的区别

联合在定义、说明、使用形式上都同结构相似,唯一不同的地方,联合在内存占用的大小和结构不同


四、联合的应用

当一个对象 拥有两种不同的属性中的一种属性,但是两种属性有不属于同一类型此时应定义联合类型。
例:
一个4s人员信息 人员如果为员工,则记录员工编号 如果为客户,则记载所属区域
union t{
int bianHao; //员工编号
char *quYu; //客户所属区域
}; //定义一个字段可以存储双重属性
struct t2{
int keyId; //自动编号
char *name; //姓名
union t sort; //区域/员工编号
};

相关阅读:
c语言sizeof用法
c语言结构体定义
linux c 何时用 . 何时使用->