C语言中建立数据类型-共用体类型和共用体变量-学习笔记-53

引入

如果想在一段内存单元,存放不同类型的变量,如

整型
字符型
实型变量

存放在同一个地址开始的内存单元。 该怎么办?

这时,就需要共用体类型,整型、字符型、实型变量所占用的字节数是不同的,如果要在同一个内存地址开始,势必意味着后一个数据要覆盖前一个数据。

我们称这种使几个不同的变量共享同一段内存的结构,为共用体类型的结构。

共用体也可以顾名思义,共用一段内存开始地址的共用体

共用体类型

一般形式

union 共用体名
{
成员表列
} 变量表列; (注意有分号)

如:

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
2
3
4
5
6
7
union Data{
int i;
char ch;
float f;
}a,b,c;
printf("%d",Data.i); //引用其成员是合法的
printf("%d",Data); //引用共用体是不合法的

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!