C语言---联合体

一 、什么是联合体

在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)中是各变量是“互斥”的——缺点就是不够“包容”;但优点是内存使用更为精细灵活,也节省了内存空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值