共用体union


结构体笔记 C语言 第十一章 结构体

1 概念

共用体(联合体union): 是一种构造数据类型,不同类型的变量存放在同一内存区域内。

共用体:类型定义、变量定义(3种,同结构体)及引用方式与结构体相似,但有本质的区别。

  • 结构体变量: 各成员占用连续的不同存储空间
  • 共用体变量: 各成员占用同一个存储区域,数据可以互相覆盖

2 类型定义

union 共用体名
{
数据类型 成员名1;
数据类型 成员名2;

数据类型 成员名n;
};

3 共用体变量定义

union data
{
	char c; 
	int n;
	double f;
};
union data x,y;

定义了共用体变量之后,系统将给它分配内存空间。共用体变量中的各成员占用同一存储空间,共用体变量所占内存空间为占用字节最大的成员的长度
在这里插入图片描述

x.n = 100; y=x
共用体数据在同一内存空间中存放多个不同类型的成员,
在某一时刻只能存放其中的一个成员。
同类型的共用体变量可相互赋值

4 共用体变量引用

与结构体变量成员引用的方式相同,也使用“->”和“.”两种运算符来实现:

共用体变量名.成员名
共用体指针变量名->成员名

如:union data d1, *pd;
pd=&d1;

对d1成员的引用可以是:

d1.i 或 pd->i
d1.ch 或 pd->ch
d1.f 或 pd->f

  1. 对共用体变量成员的赋值,保存的是最后的赋值,前面对其他成员的赋值均被覆盖。
  2. 定义共用体变量时,只按占用空间最大的成员来分配空间,在同一时刻只能存放一个数据成员的值
  3. 初始化:在定义的同时,可以初始化,但初始化只能对第一个成员初始化。如:union data d1={10};
  • 求结果
#include <stdio.h>
union un
{
    int i;
    char c[2];
};
int main()
{
    union un x;
    x.i = 5;
    x.c[0] = 10;
    x.c[1] = 1;
    printf("%d,%d,%d\n", x.i, x.c[0], x.c[1]);
    return 0;
}
  • 运行结果(不是5,10,1)

266,10,1

  • 原因(3次赋值)
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


版权声明:本文为weixin_57345774原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。