2013-07-25 40 views
-4

我想問一下,如果我們知道列數而不是行數,是否可以使用malloc分配C數組。分配內存到二維數組

int Array[runtime value][N]; 
+2

只是推遲一個直到你知道行數爲止。 – 2013-07-25 05:57:55

回答

2

是。幾種方法來做到這一點。

其實不是一個運行時間,但你沒有指定一個維度:

int array[][3] = {{1,2,3}, {4,5,6}}; 

堆棧,其中rows運行時間變量:

int array[rows][COLUMNS]; 

在堆使用malloc,但不要忘記稍後致電free

int (*array)[COLUMNS]; 
array = malloc(rows*sizeof(int[COLUMNS])); 

// ... 

free(array); 
+0

+1,你是對的,我第一次錯了 –

1

是的。您可以動態地分配一個:

// Allocate the columns 
int** two_dimensional_array = malloc(COLUMNS * sizeof(int*)); 

// Find the number of rows on runtime 
// however you please. 

// Allocate the rest of the 2D array 
int i; 
for (i = 0; i < COLUMNS; ++i) { 
    two_dimensional_array[i] = malloc(sizeof(int) * ROWS); 
} 

或者,你可以有一個堆棧具有可變大小(C99)上:

int n; 
scanf("%d", &n); 

int arr[n][COLUMNS]; 
+0

感謝您的澄清。 :)我很困惑,如果我們可以使用靜態數組或不。 –

+0

@tariqzafar:是的,你可以使用C數組,'malloc'不是必需的。 –