在本教程中,您将学习C语言编程中的共用体。更具体地说,如何创建共用体(联合体),访问其成员以及了解共用体与组织之间的差异。共用体又被称为联合体, 和结构体同属于C语言数据类型中的结构类型。
共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。
union也是一种用户定义的类型,类似于C中的struct,除了一个关键字的区别。结构体分配足够的空间存储其所有成员,而共用体分配空间仅存储最大的成员。
我们使用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类型的union变量car1、car2和union指针car3。
我们使用.运算符来访问共用体的成员。要访问指针变量,我们还使用->运算符。
在上面的示例中,
要访问car1的价格(price),请使用car1.price。
要访问car3的价格(price),可以使用(* car3).price或car3-> price。
让我们以一个实例来说明共用体与结构体之间的区别:
#include <stdio.h> union unionJob { //定义 union char name[32]; float salary; int workerNo; } uJob; struct structJob { char name[32]; float salary; int workerNo; } sJob; int main() { printf("union 的大小 = %d 字节", sizeof(uJob)); printf("\nstruct 的大小 = %d 字节", sizeof(sJob)); return 0; }
输出结果
union 的大小 = 32 字节 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; //当j.workerNo被赋值时, // j.salary将不再保留12.3 j.workerNo = 100; printf("薪水 = %.1f\n", j.salary); printf("工人人数 = %d", j.workerNo); return 0; }
输出结果
薪水 = 0.0 工人人数 = 100