長久以來,我一直以為C語言的數組大小必須是在編譯前就確定下來的常量值,相信很多C語言初學者也是和我一樣的認識。然而,直到今天我才發現原來從C99標準開始C語言就已經支持了可變長數組。
例如如下程序(注:VS系列編譯器均不支持該特性,搞不懂微軟為何不好好支持C99標準):
#include <stdio.h> int main(void) { int a = 2; int b[a + 1]; // 數組b的長度只有在運行時才可以確定。 for (int i = 0; i < 3; i++) { b[i] = i; printf("%d\n", b[i]); } return 0; }
上面的代碼在GCC 7.3上測試通過(實際上任何支持C99標準的編譯器都可以)。
需要注意的是,在C語言中,可變長數組只能用於局部變量中,在全局變量中使用可變長數組會導致編譯器報錯。
另外,可變長數組不等於動態數組,也就是説,數組的維度在變量的整個生命週期中是不可變的。
可變長數組對於二維、三維…的數組及類似int (*a)[b/*b是個變量*/ + 2];
這種指向二維數組的指針也一樣適用。
我fu了,憨憨vs
淦,VS不支持……難怪了