2014-01-25 79 views
1

你好,我想創建一個數組表,誰將是2xX和X是一個自定義數字可以說20,所以我們將得到一個2x20數組表和所有這一切在c。 我試圖讓它這樣不能在C中創建自定義數組大小表?

int j=20; 

int table[2][j]; 

但它看起來像我不能使它工作!

+2

在C99中是可能的。否則使用malloc/calloc –

+0

是的,只需使用C99編譯器(即不是MSVC或Turbo C的編譯器)進行編譯即可。 – 2014-01-25 20:58:55

+0

C99具有可變長度數組,但您可能不想使用它們(取決於'X'的上限)。您需要使用動態分配 –

回答

4

在C99 +你有Variable Length Arrays。但是,它看起來像你沒有使用C99 +編譯器(Visual Studio?),並且無論如何,這可能是一個壞主意,因爲大數值的X可能會使堆棧崩潰。如果你能保證合理的大小,並且你可以使用不同的編譯器,這是一個不錯的選擇。

但是,如果你不能使用VLA的,你需要使用動態分配:

int *table = malloc(rows * columns * sizeof *table); 

這只是分配的內存足夠大,以適應整個表一個大截。爲了得到一個特定的元素,使用...

int item = table[y * columns + x]; 

如果你想使用table[x][y]語法,那麼你將需要以不同的方式分配它。

int (*table)[columns] = malloc(rows * sizeof *table); 
/* ... */ 
table[i][j] = value; 
/* ... */ 
int item = table[i][j]; 

這裏,table是指向的columnsint列數組。