【结构与链表】在C语言中,结构体是一种重要的数据结构,允许我们将不同类型的数据组合成一个单一的实体,这类似于其他高级语言中的“记录”类型。结构体的定义使用`struct`关键字,通过它我们可以定义自定义的数据类型,包含各种基本数据类型以及已定义的其他结构体类型。
### 10.1 结构类型与结构变量的定义
结构类型定义的基本语法如下:
```c
struct 结构类型名 {
数据类型 数据项1;
数据类型 数据项2;
...
数据类型 数据项n;
};
```
在案例10.1中,定义了三个结构类型:`date`表示日期,`std_info`表示学生信息,`score`表示成绩。`std_info`结构中,`birthday`是`date`类型的成员,展示了结构体中嵌套结构体的用法。
结构变量可以通过以下两种方式定义:
- **间接定义法**:先定义结构类型,然后定义结构变量,如:
```c
struct std_info student;
```
这里,`student`是一个`std_info`类型的结构变量,包含所有结构类型定义的成员。
- **直接定义法**:在定义结构类型的同时定义结构变量,如:
```c
struct std_info {
...
} student;
```
这样,`student`是与结构类型定义在一起的结构变量。
### 10.2 结构变量的引用与初始化
结构变量的成员可以通过`.`运算符来引用,例如`student.name`引用`student`结构变量的`name`成员。结构变量的初始化可以在声明时进行,也可以在程序的其他地方。案例10.2中可能涉及到对结构变量`student`的初始化,以存储并显示一个学生的基本信息。
### 10.3 结构数组
结构数组是结构变量的数组形式,可以同时存储多个结构实例。定义结构数组的方式类似于普通数组,例如:
```c
struct std_info students[10];
```
这样,`students`就是一个包含10个`std_info`结构的数组。
### 10.4 指向结构类型数据的指针
结构指针用于指向结构变量的地址,可以用来传递结构数据或者作为函数参数。例如:
```c
struct std_info *ptr;
ptr = &student;
```
这里,`ptr`指向`student`的地址,通过指针可以访问和修改结构变量的成员。
### 10.5 链表处理
链表是动态数据结构,由一系列节点(每个节点包含数据和指向下一个节点的指针)组成。结构指针在链表处理中扮演关键角色,通过指针链接各个节点。
### 10.6 共用型和枚举型
共用型(union)允许在一个内存位置存储不同类型的变量,而枚举型(enum)定义一组命名的整数常量。
### 10.7 定义已有类型的别名
使用`typedef`关键字可以为已有的类型创建别名,如:
```c
typedef struct std_info Student;
```
之后,`Student`就可以作为`std_info`的别名使用。
总结,本章详细讲解了C语言中的结构体,包括定义、引用、初始化,以及结构数组、结构指针和链表的处理。这些知识对于理解和操作复杂数据结构至关重要。