首页 > 编程笔记 > C语言笔记 阅读:17

C语言union共用体的用法(附带实例)

共用体(union)也称为联合体,看起来很像结构体,只不过关键字由 struct 变成了 union。

共用体和结构体的区别在于,结构体定义了一个由多个数据成员组成的特殊类型,而共用体定义了一块被所有数据成员共享的内存,可使几种不同类型的变量存放到同一内存单元中。

定义共用体变量有以下 3 种方式:

1) 先声明共用体类型,再定义变量。一般形式如下:
union 共用体名
{
    成员列表;
};                       //定义共同体类型
union 共用体名 变量名;     //定义共用体变量
例如:
union DataUnion
{
    int iInt;
    char cChar;
    float fFloat;
};
union DataUnion variable;   /*定义共用体变量*/

2) 声明共用体类型的同时定义变量。一般形式如下:
union 共用体名
{
    成员列表;
}变量名;
例如:
union DataUnion
{
    int iInt;
    char cChar;
    float fFloat;
}variable;  /*定义共用体变量*/

3) 直接定义共用体变量。一般形式如下:
union
{
    成员列表
}变量名;
例如:
union
{
    int iInt;
    char cChar;
    float fFloat;
}variable; /*定义共用体变量*/
可以看到,共用体定义变量的方式与结构体定义变量的方式很相似。要注意的是,结构体变量的大小是其所包括的所有数据成员大小的总和,其中每个成员分别占有自己的内存单元;而共用体的大小取决于所包含的数据成员对应的最大内存的大小。

共用体的使用

共用体变量定义完成后,就可以引用其中的成员数据来进行使用。使用的一般形式如下:
共用体变量.成员名;
例如,使用前面定义的 variable 变量中的成员数据,代码如下:
variable.iInt;
variable.cChar;
variable.fFloat;

注意,不能直接使用共用体变量,如“printf("%d",variable);”的写法是错误的。

【实例】将玻璃罐头瓶设为一个共用体,这个罐头瓶可以装桃,可以装椰子,也可以装山楂。在本实例中定义共用体变量,通过定义的函数使用共用体中的数据成员。具体代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"                    /*包含头文件*/
#include<string.h>
/*声明桃结构体*/
struct peaches
{
    char name[64];
};
/*声明椰子结构体*/
struct coconut
{
    char name[64];
};
/*声明山楂结构体*/
struct hawthorn
{
    char name[64];
};
/*声明罐头共用体*/
union tin
{
    struct  peaches p;
    struct  coconut c;
    struct  hawthorn h;
};
int main()                                 /*主函数main()*/
{
    union tin t;                           /*定义一个共用体*/
    strcpy(t.p.name, "桃");               /*将相应的名字复制给相应的变量*/
    strcpy(t.c.name, "椰子");
    strcpy(t.h.name, "山楂");

    printf("这个罐头瓶装%s\n", t.p.name);   /*输出信息*/

    return 0;                              /*程序结束*/
}
运行程序,结果为:

这个罐头瓶装山楂

总结

在使用共用体类型时,需要注意以下几点:

相关文章