Я хотел спросить, можно ли выделить массив в C с помощью malloc, если мы знаем значение количества столбцов, но не количество строк.Выделить память в двумерный массив
int Array[runtime value][N];
Я хотел спросить, можно ли выделить массив в C с помощью malloc, если мы знаем значение количества столбцов, но не количество строк.Выделить память в двумерный массив
int Array[runtime value][N];
Да. Несколько способов сделать это.
На самом деле не во время выполнения, но вы не должны указывать одно измерение:
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);
+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];
Спасибо за разъяснение. :) Я был смущен, если каким-то образом мы можем использовать статический массив или нет. –
@tariqzafar: Да, вы можете использовать массив C, 'malloc' не требуется. –
Просто отложить llocation, пока вы не узнаете количество строк. –