MST
星途 面试题库

面试题:C语言结构体与动态内存分配的基础应用

假设有一个结构体表示学生信息,包含姓名(字符串)、年龄和成绩。请编写代码,使用动态内存分配创建一个学生结构体数组,数组大小由用户输入决定,然后输入每个学生的信息,并最后释放分配的内存。
32.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

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

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

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

    // 动态分配学生结构体数组内存
    Student *students = (Student *)malloc(n * sizeof(Student));
    if (students == NULL) {
        printf("内存分配失败\n");
        return 1;
    }

    // 输入每个学生的信息
    for (int i = 0; i < n; 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);
    }

    // 输出学生信息
    printf("\n学生信息如下:\n");
    for (int i = 0; i < n; i++) {
        printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", students[i].name, students[i].age, students[i].score);
    }

    // 释放分配的内存
    free(students);

    return 0;
}

上述代码首先定义了一个Student结构体来表示学生信息。然后根据用户输入的学生数量动态分配内存创建结构体数组。接着通过循环让用户输入每个学生的具体信息,最后输出这些信息并释放动态分配的内存。注意在实际应用中,还可以对输入进行更严格的有效性检查。