一文讲解C语言联合

联合 union 是一种数据类型,它的成员可以是不同的数据类型,但引用的是同一个内存空间。当想在不同时刻把不同类型存储于同一个位置时,就可以使用联合。

一文讲解C语言联合

联合声明

在声明联合前,要先定义联合,定义联合使用 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语言联合


原文始发于微信公众号(海人为记):一文讲解C语言联合

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/27481.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!