首页 > 编程笔记 > C++笔记 阅读:10

C++ union联合体的用法(非常详细)

共用体又称为联合体,也是一种构造数据类型。它和结构体有些类似,都是将不同的数据项组织成为一个整体,区别是共用体在内存中占用首地址相同的一段存储单元。

共用体的定义

定义共用体类型的一般形式如下:
union 共用体类型名
{
    成员类型 共用体成员名 1;
    成员类型 共用体成员名 2;
    …
    成员类型 共用体成员名 n;
};
其中,union 是定义共用体数据类型的关键字;共用体类型名是一个标识符,后续可用它定义共用体变量;大括号内是共用体成员,成员类型是常规的数据类型,用来设置共用体成员存储空间。

共用体中,多个成员使用的是同一段内存空间,因此其变量所占的内存大小等于其最长成员的大小。一个共用体变量不能同时存放多个成员的值,某一时刻只能存放最后赋给它的值。

共用体变量的声明和引用

1) 先定义共用体,然后声明共用体变量。例如:
union myUnion //定义共用体 myUnion
{
    int i;
    char ch;
    float f;
};
myUnion u; //声明共用体变量u

2) 定义共用体的同时声明共用体变量。例如:
union myUnion //定义共用体 myUnion
{
    int i;
    char ch;
    float f;
};
u; //同时声明共用体变量u

3) 省略共用体类型名,直接声明共用体变量。例如:
union //省略共用体类型名
{
    int i;
    char ch;
    float f;
} u; //直接声明共用体变量u

4) 共用体成员的引用同样需使用成员运算符“.”。例如,可以使用 u.i、u.ch 和 u.f 引用共用体变量 u 的 3 个成员。

注意,不能引用共用体变量,只能引用共用体变量中的成员。例如,直接引用 u 是错误的。

初学者可能会有疑惑,共用体变量名可以赋值吗?其实只要赋的值是一个相同类型的共用体类型即可。引用共用体变量名也可以得到一个值,这个值就是共用体对象本身的值。

C++共用体实例

【实例】公司员工下班可以乘坐公交车或地铁,设计一个交通工具的共用体,让员工进行选择。在本实例中定义共用体变量,通过定义的函数引用共用体中的数据成员。
#include <stdio.h>
#include <string.h>
struct bus //声明公交结构体类型 bus
{
    char name[64];
};

struct subway //声明地铁结构体类型 subway
{
    char name[64];
};

union Transportation //声明交通工具共用体类型 Transportation
{
    struct bus p;
    struct subway c;
};

int main()
{
    union Transportation t; //定义交通工具共用体t
    strcpy(t.p.name, "地铁"); //将相应的名字复制给相应的变量
    strcpy(t.c.name, "公交车");
    printf("员工选择%s\n", t.p.name); //输出信息
    printf("员工选择%s\n", t.c.name);
    return 0;
}
程序运行结果为:

员工选择公交车
员工选择公交车

在程序中改变共用体的一个成员,其他成员也会随之改变。当给某个特定的成员赋值时,其他成员的值也具有一致的含义,这是因为它们的值的每一个二进制位都被新值覆盖。结果显示正确的只有最后赋值的成员。

共用体的特点

共用体数据类型有以下几个特点:

相关文章