💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# C 联合 > 原文: [https://www.programiz.com/c-programming/c-unions](https://www.programiz.com/c-programming/c-unions) #### 在本教程中,您将学习 C 编程中的联合。 更具体地说,如何创建联合,访问其成员以及了解联合与组织之间的差异。 联合是用户定义的类型,与 C 中的[结构](/c-programming/c-structures)相似,但有一个键差异。 结构分配足够的空间来存储其所有成员,而联合则分配空间来仅存储最大的成员。 * * * ## 如何定义联合? 我们使用`union`关键字定义联合。 这是一个例子: ```c union car { char name[50]; int price; }; ``` 上面的代码定义了派生类型`union car`。 * * * ## 创建联合变量 定义联合后,它将创建用户定义的类型。 但是,没有分配内存。 要为给定的联合类型分配内存并使用它,我们需要创建变量。 这是我们创建联合变量的方法。 ```c union car { char name[50]; int price; }; int main() { union car car1, car2, *car3; return 0; } ``` 创建联合变量的另一种方法是: ```c 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`。 * * * ## 联合与结构之间的区别 让我们以一个例子来说明联合与结构之间的区别: ```c #include <stdio.h> union unionJob { //defining a union char 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; } ``` **输出** ```c size of union = 32 size of structure = 40 ``` **为什么联合和结构变量的大小存在差异?** 这里,`sJob`的大小为 40 个字节,因为 * `name[32]`的大小为 32 个字节 * `salary`的大小为 4 个字节 * `workerNo`的大小为 4 个字节 但是,`uJob`的大小为 32 个字节。 这是因为联合变量的大小将始终是其最大元素的大小。 在上面的示例中,其最大元素(`name[32]`)的大小为 32 个字节。 使用联合,所有成员共享**相同的内存**。 * * * ### 示例:访问联合成员 ```c #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.3 j.workerNo = 100; printf("Salary = %.1f\n", j.salary); printf("Number of workers = %d", j.workerNo); return 0; } ``` **输出** ```c Salary = 0.0 Number of workers = 100 ``` * * * 要了解在哪里使用联合,请访问[为什么我们需要 C 联合?](https://stackoverflow.com/questions/252552/why-do-we-need-c-unions)