2024年10月11日 15:37

This commit is contained in:
许大仙 2024-10-11 07:37:42 +00:00
parent 004ddb394f
commit f48b83bb56

View File

@ -2080,10 +2080,167 @@ int main() {
### 2.7.3 结构体指针指向结构体数组 ### 2.7.3 结构体指针指向结构体数组
* 语法:
```c
struct 结构体名 * 结构体指针变量名 = 结构体数组名;
```
> [!NOTE]
>
> 和普通数组一样,在表达式中会转换为数组中第 0 个元素的首地址。
* 示例:
```c
#include <stdio.h>
/**
* 声明学生的结构体
*/
struct Student {
int id; // 学号
char name[20]; // 姓名
char gender; // 性别
int age; // 年龄
char address[50]; // 地址
};
int main() {
// 禁用 stdout 缓冲区
setbuf(stdout, nullptr);
// 定义结构体数组变量并赋值
struct Student stuArr[5] = {
{.id = 1000, .name = "张三", .age = 18, .gender = 'M', .address = "北京"},
{.id = 1001, .name = "李四", .age = 19, .gender = 'M', .address = "上海"},
{.id = 1002, .name = "王五", .age = 20, .gender = 'F', .address = "天津"},
{.id = 1003, .name = "赵六", .age = 21, .gender = 'F', .address = "石家庄"},
{.id = 1004, .name = "田七", .age = 22, .gender = 'F', .address = "河南"},
};
// 计算数组的长度
int len = sizeof(stuArr) / sizeof(stuArr[0]);
// 遍历结构体数组中的成员
for (int i = 0; i < len; i++) {
printf("学号:%d\n", stuArr[i].id);
printf("姓名:%s\n", stuArr[i].name);
printf("性别:%c\n", stuArr[i].gender);
printf("年龄:%d\n", stuArr[i].age);
printf("地址:%s\n", stuArr[i].address);
printf("\n");
}
return 0;
}
```
* 示例:
```c
#include <stdio.h>
/**
* 声明学生的结构体
*/
struct Student {
int id; // 学号
char name[20]; // 姓名
char gender; // 性别
int age; // 年龄
char address[50]; // 地址
};
int main() {
// 禁用 stdout 缓冲区
setbuf(stdout, nullptr);
// 定义结构体数组变量并赋值
struct Student stuArr[5] = {
{.id = 1000, .name = "张三", .age = 18, .gender = 'M', .address = "北京"},
{.id = 1001, .name = "李四", .age = 19, .gender = 'M', .address = "上海"},
{.id = 1002, .name = "王五", .age = 20, .gender = 'F', .address = "天津"},
{.id = 1003, .name = "赵六", .age = 21, .gender = 'F', .address = "石家庄"},
{.id = 1004, .name = "田七", .age = 22, .gender = 'F', .address = "河南"},
};
// 计算数组的长度
int len = sizeof(stuArr) / sizeof(stuArr[0]);
// 遍历结构体数组中的成员
struct Student *p = stuArr;
for (int i = 0; i < len; i++) {
printf("学号:%d\n", p[i].id);
printf("姓名:%s\n", p[i].name);
printf("性别:%c\n", p[i].gender);
printf("年龄:%d\n", p[i].age);
printf("地址:%s\n", p[i].address);
printf("\n");
}
return 0;
}
```
* 示例:
```c
#include <stdio.h>
/**
* 声明学生的结构体
*/
struct Student {
int id; // 学号
char name[20]; // 姓名
char gender; // 性别
int age; // 年龄
char address[50]; // 地址
};
int main() {
// 禁用 stdout 缓冲区
setbuf(stdout, nullptr);
// 定义结构体数组变量并赋值
struct Student stuArr[5] = {
{.id = 1000, .name = "张三", .age = 18, .gender = 'M', .address = "北京"},
{.id = 1001, .name = "李四", .age = 19, .gender = 'M', .address = "上海"},
{.id = 1002, .name = "王五", .age = 20, .gender = 'F', .address = "天津"},
{.id = 1003, .name = "赵六", .age = 21, .gender = 'F', .address = "石家庄"},
{.id = 1004, .name = "田七", .age = 22, .gender = 'F', .address = "河南"},
};
// 计算数组的长度
int len = sizeof(stuArr) / sizeof(stuArr[0]);
// 遍历结构体数组中的成员
struct Student *p = stuArr;
for (int i = 0; i < len; i++, p++) {
printf("学号:%d\n", p->id);
printf("姓名:%s\n", p->name);
printf("性别:%c\n", p->gender);
printf("年龄:%d\n", p->age);
printf("地址:%s\n", p->address);
printf("\n");
}
return 0;
}
```
## 2.8 结构体在数据结构中的应用 ## 2.8 结构体在数据结构中的应用