在本教程中,您将学习 C 编程中的联合。 更具体地说,如何创建联合,访问其成员以及了解联合与组织之间的差异。
联合是用户定义的类型,与 C 中的结构相似,但有一个键差异。 结构分配足够的空间来存储其所有成员,而联合则分配空间来仅存储最大的成员。
如何定义联合?
我们使用union关键字定义联合。 这是一个例子:
union car{char name[50];int price;};
上面的代码定义了派生类型union car。
创建联合变量
定义联合后,它将创建用户定义的类型。 但是,没有分配内存。 要为给定的联合类型分配内存并使用它,我们需要创建变量。
这是我们创建联合变量的方法。
union car{char name[50];int price;};int main(){union car car1, car2, *car3;return 0;}
创建联合变量的另一种方法是:
union car{char name[50];int price;} car1, car2, *car3;
在这两种情况下,都创建类型为union car的联合变量car1,car2和联合指针car3。
访问联合成员
我们使用.运算符访问联合的成员。 要访问指针变量,我们还使用->运算符。
在上面的示例中,
- 要访问
car1的price,请使用car1.price。 - 要使用
car3访问price,可以使用(*car3).price或car3->price。
联合与结构之间的区别
让我们以一个例子来说明联合与结构之间的区别:
#include <stdio.h>union unionJob{//defining a unionchar name[32];float salary;int workerNo;} uJob;struct structJob{char name[32];float salary;int workerNo;} sJob;int main(){printf("size of union = %d bytes", sizeof(uJob));printf("\nsize of structure = %d bytes", sizeof(sJob));return 0;}
输出
size of union = 32size of structure = 40
为什么联合和结构变量的大小存在差异?
这里,sJob的大小为 40 个字节,因为
name[32]的大小为 32 个字节salary的大小为 4 个字节workerNo的大小为 4 个字节
但是,uJob的大小为 32 个字节。 这是因为联合变量的大小将始终是其最大元素的大小。 在上面的示例中,其最大元素(name[32])的大小为 32 个字节。
使用联合,所有成员共享相同的内存。
示例:访问联合成员
#include <stdio.h>union Job {float salary;int workerNo;} j;int main() {j.salary = 12.3;// when j.workerNo is assigned a value,// j.salary will no longer hold 12.3j.workerNo = 100;printf("Salary = %.1f\n", j.salary);printf("Number of workers = %d", j.workerNo);return 0;}
输出
Salary = 0.0Number of workers = 100
要了解在哪里使用联合,请访问为什么我们需要 C 联合?
