原來C語言的數組大小可以是一個變量呀!

長久以來,我一直以為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];這種指向二維數組的指針也一樣適用。

2 thoughts on “原來C語言的數組大小可以是一個變量呀!”

Leave a Reply

Your email address will not be published. Required fields are marked *

Captcha Code