结构体笔记 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
- 对共用体变量成员的赋值,
保存的是最后的赋值,前面对其他成员的赋值均被覆盖。 - 定义共用体变量时,只按占用空间最大的成员来分配空间,在
同一时刻只能存放一个数据成员的值 - 初始化:在定义的同时,可以初始化,
但初始化只能对第一个成员初始化。如: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版权协议,转载请附上原文出处链接和本声明。