程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java、鸿蒙、嵌入式、人工智能等开发,专注于程序员成长的那点儿事,希望在成长的路上有你相伴!君志所向,一往无前!
1.共用体概述
有时需要一种数据结构,不同的场合表示不同的数据类型。比如,如果只用一种数据结构表示学生的“成绩”,这种结构就需要有时是整数(80、90),有时是字符('A'、'B'),又有时是浮点数(80.5、60.5)。
C 语言提供了共用体类型(Union 结构),用来自定义可以灵活变更的数据结构。它内部可以包含各种属性,但同一时间只能有一个属性,因为所有属性都保存在同一个内存地址,后面写入的属性会覆盖前面的属性。这样做的最大好处是节省内存空间
。
“共用体”与“结构体”的定义形式相似,但它们的含义是不同的。
-
结构体变量所占内存长度是各成员占的内存长度之和;每个成员分别占有其自己的内存单元。
-
共用体变量所占的内存长度等于最长的成员的长度;几个成员共用一个内存区。
2.声明共用体
格式:
union 共用体类型名称{
数据类型 成员名1;
数据类型 成员名2;
…
数据类型 成员名n;
};
示例:
union SystemConfig {
int newNum;
float baseScore;
};
上例中, union 命令定义了一个包含两个属性的数据类型 SystemConfig。虽然包含两个属性,但是同一时间只能取到一个属性。最后赋值的属性,就是可以取到值的那个属性。
3.声明共用体变量
先定义共用体类型,再定义共用体变量
union Data {
short m;
float x;
char c;
};
//声明共用体变量
union Data a, b;
以共用体变量a为例,它由3个成员组成,分别是m、x和c,编译时,系统会按照最长的成员为它分配内存,由于成员x的长度最长,它占4个字节,所以共用体变量a的内存空间也为4个字节。
4.调用共同体变量的成员
方式:
union Data a;
a.c = 4;
一旦为其他属性赋值,原先可以取到值的 a.c 属性就不再有效了。除了这一点,Union 结构的其他用法与 Struct 结构,基本上是一致的。
5.注意事项
-
不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。只能引用共用体变量中的成员。
-
C99允许同类型的共用体变量互相赋值。
a.i //引用共用体变量中的整型变量i
a.ch //引用共用体变量中的字符变量ch
a.f //引用共用体变量中的实型变量f
printf("%d",a); //错误的
printf("%d",a.i); //正确的
-
C99允许用共用体变量作为函数参数。
b = a; //a和b是同类型的共用体变量,合法
-
共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型定义中,数组也可以作为共用体的成员。
好啦本篇就到这里啦,希望大家2025继续加油!