📜  C联盟

📅  最后修改于: 2020-10-04 12:30:47             🧑  作者: Mango

在本教程中,您将学习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类型的联合变量car1car2和联合指针car3


访问工会成员

我们使用. 运算符访问工会成员。要访问指针变量,我们还使用-> 运算符。

在上面的示例中,

  • 要访问car1 价格car1.price使用car1.price
  • 要使用car3访问价格 ,可以使用(*car3).pricecar3->price

联合与结构之间的区别

让我们以一个例子来说明联合与结构之间的区别:

#include 
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;
}

输出

size of union = 32
size of structure = 40

为什么联合变量和结构变量的大小存在这种差异?

在这里, sJob的大小为40个字节,因为

  • name[32]的大小为32个字节
  • salary的大小是4个字节
  • workerNo的大小是4个字节

但是, uJob的大小为32个字节。这是因为联合变量的大小将始终是其最大元素的大小。在上面的示例中,其最大元素( name[32] )的大小为32个字节。

使用联合,所有成员共享相同的记忆


示例:访问工会会员

#include 
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;
}

输出

Salary = 0.0
Number of workers = 100

要了解在哪里使用联合,请访问为什么我们需要C联合?