MST

星途 面试题库

面试题:C语言指针在复杂动态内存结构中的角色

假设有一个结构体表示学生信息,包含姓名(字符串)、年龄和成绩。使用指针动态分配内存来存储若干学生的信息(学生数量由用户输入)。要求实现结构体的初始化、信息输入、按照成绩排序(使用指针操作)以及内存释放的功能。
25.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义学生结构体
typedef struct Student {
    char name[50];
    int age;
    float score;
} Student;

// 初始化学生结构体数组
Student* initStudents(int num) {
    Student* students = (Student*)malloc(num * sizeof(Student));
    if (students == NULL) {
        printf("内存分配失败\n");
        return NULL;
    }
    return students;
}

// 输入学生信息
void inputStudents(Student* students, int num) {
    for (int i = 0; i < num; i++) {
        printf("请输入第 %d 个学生的姓名: ", i + 1);
        scanf("%s", students[i].name);
        printf("请输入第 %d 个学生的年龄: ", i + 1);
        scanf("%d", &students[i].age);
        printf("请输入第 %d 个学生的成绩: ", i + 1);
        scanf("%f", &students[i].score);
    }
}

// 按照成绩排序(冒泡排序,使用指针操作)
void sortStudentsByScore(Student* students, int num) {
    for (int i = 0; i < num - 1; i++) {
        for (int j = 0; j < num - i - 1; j++) {
            if ((students + j)->score < (students + j + 1)->score) {
                Student temp = *(students + j);
                *(students + j) = *(students + j + 1);
                *(students + j + 1) = temp;
            }
        }
    }
}

// 释放内存
void freeStudents(Student* students) {
    free(students);
}

// 打印学生信息
void printStudents(Student* students, int num) {
    for (int i = 0; i < num; i++) {
        printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", (students + i)->name, (students + i)->age, (students + i)->score);
    }
}

int main() {
    int num;
    printf("请输入学生数量: ");
    scanf("%d", &num);

    Student* students = initStudents(num);
    if (students == NULL) {
        return 1;
    }

    inputStudents(students, num);
    printf("\n排序前学生信息:\n");
    printStudents(students, num);

    sortStudentsByScore(students, num);
    printf("\n排序后学生信息:\n");
    printStudents(students, num);

    freeStudents(students);

    return 0;
}

上述代码实现了以下功能:

  1. 初始化:通过initStudents函数使用malloc动态分配内存来存储学生结构体数组。
  2. 信息输入inputStudents函数用于从用户处获取每个学生的姓名、年龄和成绩。
  3. 排序sortStudentsByScore函数使用冒泡排序算法,通过指针操作对学生结构体数组按照成绩进行降序排序。
  4. 内存释放freeStudents函数使用free释放动态分配的内存。
  5. 打印printStudents函数用于打印学生的信息。

main函数中,引导用户输入学生数量,调用上述函数完成各项操作。