C 语言结构体和联合体概述17 Mar 2025 | 6 分钟阅读 结构体和联合体是 C 语言中许多用户定义数据类型中的两种。它们之间有很多相似之处,但也存在一些显著的差异。在本文中,我们将讨论这两种数据类型,并根据功能区分它们。 结构体 (STRUCTURES)结构体可以简单地定义为一种用户定义的数据类型,它将逻辑上相关的项组合成一个单一的单元。我们可以通过访问这个单一单元来使用所有不同的数据项。 所有数据项都存储在连续的内存位置中。这不仅仅允许存储单一数据类型项,还可以存储不同数据类型项。在使用它(就像在程序中使用变量之前必须先定义变量一样)之前,必须先定义结构体。 结构体定义语法示例假设我们需要存储员工的详细信息。这包括 ID、姓名、年龄、薪水、职位以及其他属于不同数据类型的几个因素。 内存空间分配 假设我们存储了 id。它存储在某个地址,比如 8000,由于它是 int 数据类型,需要 2 个内存单元。现在,下一个项,name,紧跟在 id 后面存储在 8002。同样,所有项都连续存储。 8000 -> emp_id (2 字节) 8002 -> name[20] (20*1 = 20 字节) 8022 -> salary (4 字节) 8026 -> designation[50] (50*1 = 50 字节) 8076 ->dept_no (2 字节) 8078 -> age (2 字节) 示例程序输出 Size of the structure: 14 需要注意的点 此处, 结构体 'S' 的大小 = sizeof(roll) + sizeof(name) + sizeof(mark) = 2 + 10 + 2 = 14 访问结构体的成员我们不能在定义时初始化结构体,也不能仅仅通过名称访问成员。在定义结构体后,我们需要定义该结构体数据类型的变量。 现在,我们使用这个变量通过特殊运算符 (.) 来访问结构体中的项。下面是一个例子; e1 现在是结构体变量。 访问结构体中的数据项
这是另一个例子 另一种方法 示例程序输出 Roll no : 110 Name : Sarika Marks : 568 //2. 从用户输入 输出 Enter the name of the student: Sagari Enter his/her roll number: 6 Enter his/her marks: 780 Displaying the information: Name: Sagari Roll number: 6 Marks: 780 将一个结构体赋值给另一个结构体我们可以将一个完整的结构体赋值给另一个。如果我们这样做,我们可以通过另一个结构体的变量来访问一个结构体的成员,反之亦然。 假设 e1 和 e2 分别是两个结构体 Emp1 和 Emp2 的变量。如果我们给 e1 赋值 e2 现在,结构体 Emp2 的每个成员的值都被赋给了 Emp1 的相应成员。 结构体数组它用于一次性存储大量相似的信息。在这里,我们不使用普通变量,而是将一个数组用作结构体变量。现在,我们可以存储更多信息。 语法 实施 输出 Enter detailsof the Employee Enter Employee Id : 1 Enter Employee Name : Ravi Enter Employee Age : 21 Enter Employee Salary : 23000 Enter detailsof the Employee Enter Employee Id : 2 Enter Employee Name : Rajesh Enter Employee Age : 32 Enter Employee Salary : 67890 Enter detailsof the Employee Enter Employee Id : 3 Enter Employee Name : Kiran Enter Employee Age : 34 Enter Employee Salary : 23435 Details of Eloyees 1 Ravi 21 23000 2 Rajesh 32 67890 3 Kiran 34 23435 结构体嵌套结构体我们可以将一个结构体定义为另一个结构体的变量。通过这样做,我们可以为结构体的关键成员创建一个单独的块,用于存储更准确、更清晰的信息。 语法 在这里,我们使用了变量 doj,它是另一个结构体,并将其包含在结构体 date 中。通过这样做,我们可以了解确切的日期、月份和年份,从而提高可读性和信息量。 要访问这些成员, 访问嵌套在另一个结构体中的结构体的语法是 示例 在上面的例子中 e1.doj.day; -> 用于 date 中的 day e1.doj.month; -> 用于 date 中的 month e1.doj.year; -> 用于 month 中的 year 完整程序示例 输出 employee id : 101 employee date of joining (dd/mm/yyyy) : 10-11-2014 UNION就像结构体一样,联合体也是一种用户定义的数据类型,它将逻辑上相关的变量组合成一个单一的单元。 几乎所有的属性和语法都相同,除了某些因素。 语法 示例 联合体的内存分配 ![]() 在结构体中,它占用的内存是其所有成员占用的内存之和,因为它们是连续组织的,每个成员都有自己的内存。 但是,在联合体中,数据项是按顺序堆叠的。因此,存储联合体所需的总内存空间是其中最大内存项所需的内存。 另一个主要的区别是,在结构体中,我们可以随时访问任意数量的项。但在联合体中,一次只能访问一个项。 这里有一个表格来区分结构体和联合体之间的所有因素
下一主题C 语言一维数组和二维数组的区别 |
我们请求您订阅我们的新闻通讯以获取最新更新。