为什么可以在C中生成动态大小的数组?

时间:2018-12-20 15:33:30

标签: c arrays constants

我写了以下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,但这也可以。为什么允许将非常量变量大小用作数组的大小?

2 个答案:

答案 0 :(得分:6)

这就是所谓的可变长度数组”。

自C99以来已支持可变长度自动数组

它们像普通数组一样被声明,但是长度不是恒定的,并且存储是在声明时分配的。

有关更多信息,请参见gcc.gnu.org

答案 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())。