用一个结构体中嵌套指针结构体来完成一个班级中多个学生的信息存储
时间: 2024-09-21 07:06:57 浏览: 47
在编程中,特别是使用结构体(struct)的时候,可以创建一个包含指针的嵌套结构体来表示班级中多个学生的信息。假设我们有简单的“学生”(Student)结构体,包括姓名(Name)和年龄(Age),以及一个指向另一个结构体数组的指针,用于存储整个班级的学生列表。
```c
// 定义单个学生结构体
typedef struct {
char* name; // 学生姓名
int age; // 学生年龄
} Student;
// 班级结构体,包含一个学生数组指针
typedef struct {
Student* students; // 指向学生的指针
int num_students; // 班级总人数
} Class;
// 创建班级实例
Class my_class = {
.students = NULL, // 初始时学生列表为空
.num_students = 0 // 班级初始人数
};
// 动态分配内存添加学生
void add_student(Class* class, const char* name, int age) {
if (class->num_students >= MAX_STUDENTS) {
printf("班级已满,无法添加更多学生。\n");
return;
}
Student* new_student = malloc(sizeof(Student));
if (!new_student) {
printf("内存分配失败。\n");
return;
}
new_student->name = strdup(name);
new_student->age = age;
class->students[class->num_students] = new_student;
class->num_students++;
}
// 删除学生信息时记得释放内存
void remove_student(Class* class, int index) {
if (index < 0 || index >= class->num_students) {
printf("无效索引。\n");
return;
}
free(class->students[index].name); // 释放姓名字符串
free(class->students[index]); // 释放学生结构体本身
memmove(&class->students[index], &class->students[index + 1], sizeof(Student) * (class->num_students - index - 1));
class->num_students--;
}
```
阅读全文