變長數組

變長數組

變長數組(variable-length array),也簡稱VLA。

簡介


C語言中,直到C99標準出現之前,聲明數組時在方括弧內只能使用整數常量表達式。而C99做了很大改進,允許數組的[ ]中的值是整形變數或是整形表達式。這就解釋了下面的情況:
int n;
scanf ("%d", &n);
int array[n];
雖然n確實是需要運行時動態確定的變數,但是在C99中,以這種變數作為數組大小的形式已經是允許的了。這樣的數組就被稱之為“變長數組”。
注意:變長數組是指用整型變數或表達式聲明或定義的數組,而不是說數組的長度會隨時變化,變長數組在其生存期內的長度同樣是固定的。

使用引例


如下面的例子:
........
fun (10);
.........
void fun(int n)
{
int vla[n];
n += 10;
printf ("vla takes %d bytes/n", sizeof vla);
}
執行的結果是40。雖然n的值在聲明了數組vla之後發生了變化,但是vla不會因此而改變大小,因為變長數組一旦被聲明,其大小就會保持不變直到生命期結束。