联合 union
是一种数据类型,它的成员可以是不同的数据类型,但引用的是同一个内存空间。当想在不同时刻把不同类型存储于同一个位置时,就可以使用联合。
联合声明
在声明联合前,要先定义联合,定义联合使用 union
关键字定义,一般形式如下:
union tag {
member;
member;
...
} variable-list;
-
union
:定义联合的关键字。 -
tag
:联合标记,用于为联合命名。 -
member
:联合中定义的成员。 -
variable-list
:联合声明的联合变量。
如下所示,定义一个联合。
union Data {
int iv;
char *cv;
double dvs[10];
};
定义完联合后,声明联合与结构类似。
union Data data;
也可以在定义联合时,就声明联合变量。
union Data {
int iv;
char *cv;
double dvs[10];
} data;
如果不声明新变量,也可以将联合标签省略。
union {
int iv;
char *cv;
double dvs[10];
} d1, d2;
也可以使用 typedef
创建一个新的类型。
typedef union {
int iv;
char *cv;
double dvs[10];
} Data;
Data data; // 声明联合
联合初始化
声明联合后的联合变量可以被初始化。
union Data d1 = {12};
初始化值必须是联合第 1 个成员的类型,且必须位于花括号里面。上述的初始化的值 12
是初始化 union Data
中的 iv
变量。
也可以将另一个联合赋值给联合来初始化。
union Data d2 = d1;
C99标准中,可以使用指定初始化器。
union Data d1 = {.cv="Ming"};
使用联合
当想要存储不同数据类型的混合数据时,可以使用联合。
union Data d;
d.iv = 36;
如上所示,联合中存储了整型 36
,当要更换数据类型存储时,使用联合中的成员指向其它数据即可。
d.cv = "Other";
以上程序会清除 iv
中存储的值,而将 Other
存储在 cv
变量中。
因此,联合中依次只存储一个值。即使有足够的空间,也不能同时存储一个 int
类型值和一个 char *
类型值。
原文始发于微信公众号(海人为记):一文讲解C语言联合
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/27481.html