我一直都知道,如果不使用malloc
和free
就不可能在C中构建动态数组,那为什么这段代码编译和运行正确?C中的静态数组
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
printf("Insert a number: ");
scanf("%d", &a);
int array[a];
int i;
for(i=0; i<a; i++)
{
array[i] = rand();
}
for(i=0; i<a; i++)
{
printf("%d\t", array[i]);
}
puts("");
return 0;
}
我明白,既然没有办法改变的“数组”的大小已经宣布后,这是不是一个真正的动态数组,也可以释放callling free()
但我仍然一直以为在编译时必须知道静态数组的大小,这在这里显然不是这样的。
它被称为VLA(可变长度阵列)。它是在C99中引入的 –
是什么让你认为它是一个静态数组?我无法在任何地方看到“静态”关键字。正如Cool Guy所解释的那样,“你一直都知道的事情”并不总是真实的事情。 – gnasher729
据我所知,“静态数组”意味着在执行main()之前分配的数组,这就是您在代码中使用的每个固定大小数组的情况。 – woggio