以下是引用embed_xuel在2013-12-3 20:15:58的发言:
在C99中提出了变长数组,即为VAL,意思是你可以用一个变量去代替数组的大小。
例如
int val = 5;
int a[val];
变长数组中的变,也只是说你可以用变量去定义数组,但是变长数组的大小在创建后就是不变得,而且变长数组必须的自动的存储类。由于变长数组的限制太多了,很少人去使用他。
在C99中提出了变长数组,即为VAL,意思是你可以用一个变量去代替数组的大小。
例如
int val = 5;
int a[val];
变长数组中的变,也只是说你可以用变量去定义数组,但是变长数组的大小在创建后就是不变得,而且变长数组必须的自动的存储类。由于变长数组的限制太多了,很少人去使用他。
這種使用預先聲明的常變量定義數組的方法,在C89時代就已被很多編譯器支持,屬擴展支持(仿效C++的),後來才被C99吸收。一些舊式的編譯器,有時不支持這種定義方式,比如TC/BC之類,但用C++方式編譯的VC6卻可以(不使用.c後綴強制用C編譯即可)。同時,這個也不是VLA(所謂的動態數組),動態數組是編譯時編譯器完全無法推斷出維數的(即那是真正的變量,而不是常變量),要在運行時才獲得維數值的。像這種,實現已定義數值,編譯器編譯時就已經把數組的尺寸定下了,即使代碼在後來再修改原先的變量值,也不會再影響數組的尺寸,這其實是編譯器夠聰明的推斷行為,很早的編譯器就已經達到這種程度了,所以它們算是擴展,後來才成為標準。
題外話:所謂的標準其實原本就是不斷擴展而來,我從來不視標準為神聖不可侵犯之律條。
授人以渔,不授人以鱼。