结构与联合的区别
什么是结构?
结构是C编程语言中用户自定义的数据类型,将不同数据类型的逻辑相关数据项组合在一起。
所有结构元素都存储在连续的内存位置。结构类型变量可以在一个名称下存储多个不同数据类型的数据项。
在本教程中,您将学习:
- 什么是结构?
- 什么是联合
- 声明结构的语法
- C 编程中的结构示例
- 声明联合的语法
- C 编程中的联合示例
- 结构对比联合
- 结构的优点
- 联合的优点
- 结构的缺点
- 联合的缺点
什么是联合
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 [name of union] { type member1; type member2; type member3; };
使用“union”关键字和联合名称声明联合。 1号、2号、3号是工会的个人成员。正文部分以分号 (;) 结束。
C 编程中的联合示例
#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
一个
在上面的程序中,您可以看到 x 和 y 的值已损坏。只有变量 ch 打印预期结果。这是因为,在 union 中,内存位置在所有成员数据类型之间共享。
因此,当前存储其值的唯一数据成员将占用内存空间。变量ch的值最后被存储了,所以剩下的变量的值就丢失了。
结构对比。联合
这是结构和联合之间的重要区别:
结构 联合 可以使用 struct 关键字来定义结构。可以使用 union 关键字来定义联合。结构中的每个成员都分配有唯一的内存位置。在联合中,内存位置由所有数据成员共享。更改值一个数据成员的值不会影响结构中的其他数据成员。更改一个数据成员的值将更改联合中其他数据成员的值。它使您可以一次初始化多个成员。它使您可以仅初始化第一个成员union的大小。结构的总大小是每个数据成员的大小之和。union的总大小是最大数据成员的大小。主要用于存储各种数据类型。主要用于存储许多可用数据类型中的一种。它为内部参数中写入的每个成员占用空间。它为内部参数中写入的具有最大大小的成员占用空间。您可以一次检索任何成员。您可以访问一个成员在 union 中一次 er。它支持灵活数组。它不支持灵活数组。结构的优点
以下是使用结构的优点/好处:
- 结构将多个关于同一主题的数据聚集在同一位置。
- 当您想要收集相似数据类型和参数(如名字、姓氏等)的数据时,它会很有帮助。
- 它很容易维护,因为我们可以使用一个名称来表示整个记录。
- 在结构中,我们可以使用单个参数将完整的记录集传递给任何函数。
- 您可以使用结构数组来存储更多具有相似类型的记录。
联合的优点
以下是使用联合的优点/好处:
- 与结构相比,它占用的内存更少。
- 使用union时,只能直接访问最后一个变量。
- 当您必须为两个或多个数据成员使用相同的内存位置时,使用联合。
- 它使您可以只保存一个数据成员的数据。
- 其分配的空间等于数据成员的最大大小。
结构的缺点
以下是使用结构的缺点/缺点:
- 如果 IT 项目的复杂性超出限制,将变得难以管理。
- 更改代码中的一种数据结构需要在许多其他地方进行更改。因此,更改变得难以跟踪。
- 结构较慢,因为它需要存储所有数据的空间。
- 您可以在结构中一次检索任何成员,而在联合中一次可以访问一个成员。
- 结构为内部参数中写入的每个成员占用空间,而联合为内部参数中写入的最大大小的成员占用空间。
- 结构支持灵活数组。 Union 不支持灵活数组。
联合的缺点
以下是使用联合的缺点/缺点:
- 您一次只能使用一名工会成员。
- 不能一次初始化所有联合变量或使用不同的值。
- Union 为其所有成员分配一个公共存储空间。
主要区别:
- 结构中的每个成员都被分配了一个唯一的内存位置,而在联合中,一个内存位置由所有数据成员共享。
- 改变一个数据成员的值不会影响结构中的其他数据成员,而改变一个数据成员的值会改变联合中其他数据成员的值。
- 结构主要用于存储各种数据类型,而联合主要用于存储多种数据类型中的一种。
- 在结构中,您可以一次检索任何成员;另一方面,在联合中,您可以一次访问一个成员。
- Structure 支持灵活数组,而 union 不支持灵活数组。
C语言