1. 程式人生 > >C語言中的變長陣列

C語言中的變長陣列

學過C語言和C++的人都知道,我們在定義陣列時用的都是整型的常量,那麼大家有這樣去定義過一個數組嗎?

#include <stdio.h>
int main(int argc, char **argv)
{
    int c, d,i,j;
    scanf("%d %d",&c,&d);
    int  m[c][d];
    for(i = 0;i < c;i++)
        for(j = 0;j < d;j++)
            m[i][j] = 1;
    for(i = 0;i < c;i++)
        for
(j = 0;j < d;j++) printf("%d ",m[i][j]); }

這個程式在C語言的編輯器上是可以執行的,前提是你的編輯器必須是C99標準。
但是我們通常都不用這種情況去定義一個數組,主要還是它和普通的陣列比起來有一定的侷限性。
1.變長陣列必須是自動儲存類的,這意味著它必須在函式內部或者作為函式參量宣告。
2.變長陣列在定義時不允許被初始化。
變長陣列中的“變”並不表示在建立陣列後可以修改其大小。變長陣列的大小在建立後就不允許改變了。“變”的意思是說其維大小可以用變數來指定。
宣告一個二維變長陣列的函式:
int sum(int rows,int cols,int a[rows][cols]);
注意:
下面這種宣告是錯誤的:
int sum(int a[rows][cols],int rows,int cols);
C99標準規定可以省略函式原型中的名稱,但需要用星號代替省略的維數。
int sum(int,int,int a[] [

]);
總結:正常情況下一般還是用我們習慣上的陣列為準。