我一直都知道,如果不使用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