版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuyuzun/article/details/82904683
前言
- 本博文基于VC++6.0开发调试;
- 本博文只是对于共用体的一个简述;
什么是共用体
概念:字面意思理解,就是不少于一个东西共同使用一个物体;在C语言中,共同体是一个数据结构,所以共同体就是不同变量共同享受一段内存,这种数据类型叫做共同体类型;
在以往的学习中,包括结构体变量在内的每种数据类型变量,每个变量个体都是有自己的地址和地址空间的,并且这段空间内只能存储变量自己;但是共同体并不是这样的,共同体是不同的变量共用同一个起始地址,但是由于各变量之间的占用字节数和数据类型不同,所以在使用共同体的时候,一瞬间的值只能有一个,所以对于每次对共同体内的成员变量赋值的时候,都会发生一个数据的覆盖;
定义:(共用体类型和共用体变量的定义,以及初始化从形式上是一样的)
- 定义共同体数据类型
union 共用体名
{
//成员变量;
};
- 定义共同体变量
//方法一;
union 共用体名
{
//成员变量;
}共用体变量1;
//方法二;
union 共用体名
{
//成员变量;
};
union 共用体名 共用体变量1;
//方法三;
union
{
//成员变量;
}共用体变量1;
举个例子:
union Data
{
int num;
char name;
float score;
}stu1_data,stu2_data;
//同样类似于结构体,编译器不为共同体的定义开辟内存空间,而为共同体变量开辟;
图片解释:
从图片中可以看出:共用体三个成员变量共用同一个起始地址;
那么怎么引用共用体成员那?形式和共用体是一样的:利用成员运算符 ’ . ',来说明;
共用体特点的其他总结
- 共用体内可以存放多种数据,但是在一瞬间只能存放一个数据;存放的数据和数据类型为最后一次对本共用体变量引用结构体成员并赋值的数据和数据类型;
- 用sizeof()函数对一个共用体类型,共用体变量检测,它们的值相等且等于共用体成员数据类型中占用最大字节数的成员变量所占字节数;
- 以前的C语言不允许共用体变量做函数参数,然而可以用指向共用体变量的指针做参数;C99允许共用体变量做函数参数;
- 结构体和共用体之间可以相互嵌套,并且都可以定义相应的结构体数组和共用体数组;