联合是用户定义的类型,与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
价格 ,car1.price
使用car1.price
。 - 要使用
car3
访问价格 ,可以使用(*car3).price
或car3->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联合?