C 工会
C 联合
在本教程中,您将了解 C 编程中的联合。更具体地说,如何创建联合、访问其成员以及了解联合和结构之间的区别。
union 是一种用户定义的类型,类似于 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;
在这两种情况下,联合变量 car1 , 汽车2 , 和一个联合指针 car3 union car
类型已创建。
访问工会成员
我们使用 .
操作员访问工会的成员。为了访问指针变量,我们使用 ->
运营商。
在上面的例子中,
- 访问价格 对于
car1
,car1.price
已使用。 - 访问价格 使用
car3
,(*car3).price
或car3->price
可以使用。
联合和结构的区别
下面举个例子来说明联合和结构的区别:
#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;
}
输出
size of union = 32 size 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.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 联合?
C语言