C 共用体
本文介绍了 C 语言的共用体,包括创建共用体、访问共用体成员以及共用体和结构体之间的差异。
在 C 语言中,共用体也是一种用户定义的类型,类似于结构体。但是,共用体和结构体有一个关键的区别:结构分配足够的内存空间来存储其所有成员,而共用体所有成员共用一个内存空间,一次只能保存一个成员值。
如何定义共用体?
我们使用 union
关键字来定义共用体。下面创建了一个共用体 car
:
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.price
。(*car3).price
或car3->price
。
共用体和结构之间的区别
让我们举一个例子来说明共用体和结构之间的区别:
#include <stdio.h>
union unionJob
{
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
为什么共用体变量和结构变量的大小存在这种差异?
这里,结构体的大小是 40 个字节,因为
name[32]
的大小为 32 字节salary
的大小为 4 个字节workerNo
的大小为 4 个字节
然而,共用体的大小是 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