我写了以下c-代码段:
#include <stdio.h>
void function(int size){
int array[size];
for(int i = 0; i < size; i++){
printf("%d ", array[i]);
}
}
int main(){
int array_size;
scanf("%d",&array_size);
function(array_size);
return 0;
}
为什么可以通过这种方式生成动态大小的数组。通常我会使用malloc,但这也可以。为什么允许将非常量变量大小用作数组的大小?
答案 0 :(得分:6)
答案 1 :(得分:3)
为什么可以通过这种方式生成动态大小的数组?
不,这个
int array[size]; /* this doesn't get stored in heap section */
其中size
是运行时整数常量,不是动态数组,它称为Variable length array,并在C99中引入。仅通过调用malloc()
或calloc()
创建的动态数组,该地址从主内存的堆部分获取地址。
为什么允许使用非常量变量大小作为大小 数组?
是的,C99
及以后的VLA
可以将size
作为非常数变量。但是一旦声明了VLA
的大小,就不能像动态数组那样更改(调整大小)(可以使用realloc()
)。