variable-length array是C99添加的一個特性,即數組的長度可以在運行時(run time)決定,而不是在編譯時(compile time)。即,定義數組時不一定要使用 const int, 也可以使用變量、函數返回值等。 例如
1 int main(){ 2 int a=5, b=6; 3 int arr1[a]; 4 int arr2[ min(a,b) ]; 5 int arr3[ rand()%10 ]; 6 7 }
這些定義數組的方式都是合法的。
不過,這種聲明方式好像只適用於局部變量,全局變量是不行的。下面的用法會報錯。
int a=100; int b[a]; int main(){ return 0; }
允許運行時決定數組大小會帶來很多方便。
不過,在C11標准時,variable-length array變成了一個可選的特性,不要求編譯器必須實現。筆者測試了手頭可用編譯器的默認支持情況。
編譯器 是否支持variable-length array gcc 4.8 支持 clang 3.4 支持 visual studio 2012 不支持 visual studio 2013 不支持c,c++隱藏的東西太多,確實很麻煩。variable-length array這一特性,如果在跨平台開發時,需要慎重使用。
另外,看很多地方翻譯為 “變長數組”, 其實不是很合適,這和其他語言中的邊長數組還是不同的。