C语言 共用体
共用体支持将几种不同类型的变量存放到同一段内存单元中。
一、什么是共用体类型
有时想用同一段内存单元存放不同类型的变量。
例如,把一个短整形、一个字符型变量和一个实性变量放在同一个地址开始的内存单元上。
这些变量在内存中占的字节数不同,但都从一个地址开始。这种使几个不同变量共享同一段内存的结构,称为“共用体结构”。
二、声明共用体类型
1 |
|
例如:
声明类型的同时定义变量:
1
2
3
4
5
union Data{
int i;
char ch;
float f;
}a, b, c;先声明类型,后定义变量
1
2
3
4
5
6
union Data{
int i;
char ch;
float f;
};
union Data a, b, c;不声明类型直接定义变量
1
2
3
4
5
union{
int i;
char ch;
float f;
}a, b, c;
三、共用体变量的使用
1 |
|
例如:
1
printf("%d %c", a.i, a.ch);
四、共用体的特点
1.成员不能共存
同一个内存段可以用来存放几种不同类型的成员,但同时只能存放其中的一个成员,即不能同时访问。因为存储单元一次只能存储一个值。
代码如下:
1
2
3
4
5
6
7
union Data{
int i;
char ch;
float f;
}a;
a.i = 2487897;
printf("%d\n%c\n%f\n", a.i, a.ch, a.f);运行结果:
1
2
3
2487897
Y
0.000000因为此时共用体的内存中存放的是 int 型的数据,若调用其它成员,将会以其它类型的方式读取该内存上的内容,导致这样的结果。
2.可以初始化
可以对共用体变量初始化,但初始化表中只能有一个常量。
初始化第一个成员:
1
union Data a = {16};
初始化指定成员:
1
union Data a = {.ch = 'j'};
3.赋值将会覆盖
共用体变量中起作用的是最后一次被赋值的成员,每次赋值,原有的值都会被取代。
4.共用体和成员同地址
共用体变量的地址和它各成员的地址都是同一地址。
5.共用体可以相互赋值
C99 规定
6.共用体及其指针可以作为函数参数
C99 规定
7.共用体、结构体和数组
共用体可以出现在结构体中,也可以定义数组。
结构体也可以出现在共用体中,数组也可以作为共用体成员。
参考
- C程序设计
- C Primer Plus
- C 语言教程 | 菜鸟教程