MST

星途 面试题库

面试题:C语言动态内存分配之数组创建

在C语言中,如何使用动态内存分配创建一个一维整数数组,其大小由用户在运行时输入?请写出完整代码,并阐述动态内存分配函数(如malloc、calloc等)的选择依据。
38.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

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

int main() {
    int size;
    printf("请输入数组大小: ");
    scanf("%d", &size);

    int *arr = (int *)malloc(size * sizeof(int));
    if (arr == NULL) {
        printf("内存分配失败\n");
        return 1;
    }

    // 使用数组
    for (int i = 0; i < size; i++) {
        arr[i] = i;
    }

    // 输出数组
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    free(arr);
    return 0;
}

动态内存分配函数选择依据

  1. mallocmalloc函数用于分配指定字节数的内存空间。它不初始化分配的内存,返回的指针指向分配内存的起始地址。在本题中,因为用户输入数组大小,我们只需要一块指定大小的连续内存来存放整数,不需要对内存进行初始化,所以选择malloc
  2. calloccalloc函数也用于分配内存,但它会将分配的内存初始化为零。如果我们需要分配的数组在使用前需要全部初始化为零,那么可以选择calloc。例如,若数组用于计数等用途,初始化为零是有必要的。但本题中没有这样的需求,所以malloc更合适。
  3. reallocrealloc用于改变已分配内存块的大小。如果我们在程序运行过程中需要动态调整数组大小,就可以使用realloc。本题仅要求根据用户输入创建数组,不涉及动态调整大小,因此不需要使用realloc