在C中执行期间定义数组的大小

时间:2016-05-04 01:09:34

标签: c arrays memory memory-management

我想知道在执行期间是否可以在C中定义数组的大小。 例如,我可以这样做吗?

int n,i;
scanf("%d",&n);
int v[n];
for(i=0;i<n;i++){
 v[i] = i;
}

如果可以,我何时应该使用malloc函数来动态分配内存?我的意思是,如果我可以读取值n并分配一个具有n个位置的数组,那么在执行期间,我为什么要使用malloc?

2 个答案:

答案 0 :(得分:3)

只有在编译器支持可变长度数组时,才能使用变量指定数组的长度。这些已被添加到C99标准中,但现在是C11标准下的可选项。

答案 1 :(得分:2)

其中一个区别是,当您在函数内声明一个数组时,它会在堆栈上分配。它是该函数的本地函数,当函数返回时,它会自动释放。 malloc,在堆上分配,并返回指向已分配内存的起始地址的指针。与堆栈上的存储不同,它不会自动解除分配,如果从函数返回指针,则可以在另一个函数中使用它,直到释放它为止。 这对于更多信息非常有用:http://www.programmerinterview.com/index.php/data-structures/difference-between-stack-and-heap/