首页 > 解决方案 > 在 C 中,与 malloc 和变量数组声明相关的两个给定代码片段之间有什么区别?

问题描述

下面的代码做同样的事情吗?

代码片段 1:

#include <stdio.h>
int main(void){
    int size;
    scanf("%d", &size);
    int arr[size];
    //code to manipulate array
    return 0;
}

代码片段 2:

#include <stdio.h>
int main(void){
    int size;
    scanf("%d", &size);
    int *arr = malloc(size*sizeof(int));
    //code to manipulate array
    free(arr);
    return 0;
}

标签: carraysmalloc

解决方案


这些不一样。

第一个片段创建一个具有自动存储持续时间的数组,即在大多数实现中在堆栈上,而第二个片段在堆上动态创建一个数组。前者的作用域有一个生命周期,而不是封闭它,而后者在程序的生命周期内或直到它被释放之前都有效,以先到者为准。


推荐阅读