C 语言中结构和联合之间的区别
什么是结构?
结构是 C 编程语言中的用户定义数据类型,它将不同数据类型的逻辑相关数据项组合在一起。
所有结构元素都存储在连续的内存位置。结构类型变量可以在一个名称下存储多个不同类型的数据项。
什么是 Union
Union 是一种用户定义的数据类型,类似于结构。Union 将不同类型和大小的对象组合在一起。Union 变量分配的内存空间等于用于容纳 union 最大变量的空间。它允许不同类型的对象共享同一位置。
声明结构的语法
struct [name of the structure] { type member1; type member2; type member3; };
结构使用“struct”关键字和结构名称进行声明。数字 1、数字 2、数字 3 是结构的单独成员。主体部分以分号 (;) 结束。
C 编程中的结构示例
#include <stdio.h> struct student { char name[60]; int roll_no; float marks; } sdt; int main() { printf("Enter the following information:\n"); printf("Enter student name: "); fgets(sdt.name, sizeof(sdt.name), stdin); printf("Enter student roll number: "); scanf("%d", & sdt. roll_no); printf("Enter students marks: "); scanf("%f", & sdt.marks); printf("The information you have entered is: \n"); printf("Student name: "); printf("%s", sdt.name); printf("Student roll number: %d\n", sdt. roll_no); printf("Student marks: %.1f\n", sdt.marks); return 0; }
在上面的程序中,创建了一个名为 student 的结构。该结构有三个数据成员:1) name (字符串)、2) roll_no (整数) 和 3) marks (浮点数)。
此后,创建一个结构变量sdt,用于存储学生信息并将其显示在计算机屏幕上。
输出:
输入以下信息:
输入学生姓名:James
输入学生学号:21
输入学生成绩:67
您输入的信息是:
学生姓名:约翰
学生人数:21
学生成绩:67.0
声明 Union 的语法
union [name of union] { type member1; type member2; type member3; };
联合体使用“union”关键字和联合体名称进行声明。数字 1、数字 2、数字 3 是联合体的各个成员。主体部分以分号 (;) 结束。
C 编程中的 Union 示例
#include <stdio.h> union item { int x; float y; char ch; }; int main( ) { union item it; it.x = 12; it.y = 20.2; it.ch = 'a'; printf("%d\n", it.x); printf("%f\n", it.y); printf("%c\n", it.ch); return 0; }
输出:
1101109601
20.199892
a
在上面的程序中,您可以看到 x 和 y 的值被破坏了。只有变量 ch 打印了预期的结果。这是因为在 union 中,内存位置在所有成员数据类型之间共享。
因此,当前唯一存储其值的数据成员将占用内存空间。变量 ch 的值最后被存储,因此其余变量的值 变量 将丢失。
结构与联盟
以下是结构和联合之间的重要区别:
结构 | 工会 |
---|---|
您可以使用 struct 关键字来定义结构。 | 您可以使用 union 关键字来定义联合。 |
结构内的每个成员都被分配一个唯一的内存位置。 | 在联合中,所有数据成员共享一个内存位置。 |
改变一个数据成员的值不会影响结构中的其他数据成员。 | 改变一个数据成员的值将会改变联合中其他数据成员的值。 |
它使您能够一次初始化多个成员。 | 它使您能够仅初始化联合的第一个成员。 |
结构的总大小是每个数据成员的大小之和。 | 联合的总大小是最大数据成员的大小。 |
主要用于存储各种数据类型。 | 它主要用于存储可用的多种数据类型之一。 |
它占用了内部参数中写入的每个成员的空间。 | 它占用内部参数中写入的最大尺寸成员的空间。 |
您一次可以检索任何成员。 | 您每次可以访问联合中的一位成员。 |
它支持灵活阵列。 | 它不支持灵活数组。 |
结构优势
以下是使用结构的优点/好处:
- 结构将有关同一主题的多条数据聚集在同一位置。
- 当您想要收集类似数据类型和参数的数据(如名字、姓氏等)时,它很有帮助。
- 由于我们可以使用一个名称来表示整个记录,因此非常容易维护。
- 在结构上,我们可以使用单个参数将完整的记录集传递给任何函数。
- 您可以使用结构数组来存储更多具有相似类型的记录。
工会的优势
以下是使用 union 的优点/好处:
- 与结构相比,它占用的内存更少。
- 使用联合时,只有最后一个变量可以被直接访问。
- 当必须对两个或多个数据成员使用相同的内存位置时,使用联合。
- 它使您能够仅保存一个数据成员的数据。
- 其分配的空间等于数据成员的最大大小。
结构缺点
以下是使用结构的缺点/缺点:
- 如果IT项目的复杂性超出了限制,就会变得难以管理。
- 代码中一个数据结构的改变会引发很多其他地方的改变。因此,这些变化很难追踪。
- 结构较慢,因为它需要存储所有数据的空间。
- 您可以在结构中一次检索任何成员,而在联合中一次只能访问一个成员。
- 结构占用内部参数中写入的每个成员的空间,而联合占用内部参数中写入的最大大小的成员的空间。
- 结构支持灵活数组。联合不支持灵活数组。
工会的弊端
以下是使用 union 的缺点/缺点:
- 每次您只能使用一个工会会员。
- 所有联合变量不能被初始化或同时使用不同的值。
- 联盟为其所有成员分配一个公共的存储空间。
主要区别:
- 结构中的每个成员都分配有一个唯一的内存位置,而联合体中的内存位置由所有数据成员共享。
- 改变一个数据成员的值不会影响结构中的其他数据成员,而改变一个数据成员的值将会改变联合中其他数据成员的值。
- 结构主要用于存储各种数据类型,而联合主要用于存储多种数据类型中的一种。
- 在结构中,您可以一次检索任何成员;另一方面,在联合中,您可以一次访问一个成员。
- 结构支持灵活数组,而联合不支持灵活数组。
另请查看我们的 C 语言初学者教程:- 了解更多