本文主要是介绍十、C语言之共用体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、前言
本文介绍C语言中的共用体。更具体地说,如何创建共用体(联合体),访问其成员。共用体又被称为联合体, 和结构体同属于C语言数据类型中的结构类型。
共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。你可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。
共用体类型使用关键字 union定义, 类似于C中的 struct ,除了一个关键字的区别。结构体分配足够的空间存储其所有成员,而共用体分配空间仅存储最大的成员。
2、定义共用体类型
(1)使用union关键字定义共用体类型,如下所示:
// 定义了派生类型union car
uinon car
{char name[50];int price;
}
(2)使用typedef创建新的类型
// 定义了一个名为 OriginalUnion 的共用体类型
typedef union
{ int i; float f;
} OriginalUnion;
3、定义共用体变量
定义共用体类型后,并没有分配内存。要为给定的共用体类型分配内存并使用它,我们需要创建变量。创建共用体变量的方法如下:
union car
{char name[50];int price;
};int main()
{union car car1, car2, *car3;return 0;
}
创建联合体变量的另一种方法是:
uinon car
{char name[50];int price;
} car1, car2, *car3;
在这两种情况下,都会创建union car类型的共用体变量car1、car2和共用体指针car3。
4、访问共用体成员
使用.运算符来访问共用体成员。要访问指针变量,还要使用->运算符。
在上面的示例中:
- 要访问car1的价格(price),使用car1.price。
- 要访问car3的价格(price),可以使用 (* car3).price或car3->price。
5、共用体和结构体之间的区别
(1)以一个实例来说明共用体与结构体之间的区别:
#include <stdio.h>
union unionJob
{//定义 unionchar name[32];float salary;int workerNo;
} uJob;struct structJob
{char name[32];float salary;int workerNo;
} sJob;int main()
{printf("union 的大小 = %d 字节\n", sizeof(uJob));printf("struct 的大小 = %d 字节\n", sizeof(sJob));return 0;
}
输出结果:
union 的大小 = 32 字节
struct 的大小 = 40 字节
为什么联合变量和结构变量的大小存在这种差异?
在这里,sJob大小为40个字节,因为
- name[32]的大小是32个字节
- salary的大小是4个字节
-
workerNo的大小是4个字节
但是,uJob大小为32个字节。这是因为联合变量的大小将始终是其最大元素的大小。在上面的示例中,其最大元素(name[32])的大小为32个字节。
使用共用体,所有成员共享相同的存储空间。
(2)注意
- 结构体的成员可以是共用体;共用体的成员可以是共用体。
- 结构体中的各个成员都占用空间,都存在;共用体中的成员是多选一的关系。
这篇关于十、C语言之共用体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!