2013-07-25 2 views
-4

Я хотел спросить, можно ли выделить массив в C с помощью malloc, если мы знаем значение количества столбцов, но не количество строк.Выделить память в двумерный массив

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

Просто отложить llocation, пока вы не узнаете количество строк. –

ответ

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' не требуется. –

Смежные вопросы