Мне нужно иметь возможность передать 2D-массив в функцию сканирования после сканирования размера массива. Везде, где я смотрел, мне говорили, что вы не можете передавать 2D-массивы без измерений в функцию, но я не знаю, как это сделать иначе.
void scan_arrays (int *array, int row, int column);
int main (void){
int row;
int column;
printf("Enter sizes: ");
scanf("%d %d",&row,&column);
int firstarray[row][column];
int secondarray[row][column];
printf("Enter array 1 elements:\n");
scan_arrays(&firstarray,row,column);
printf("Enter array 2 elements:\n");
scan_arrays(&secondarray,row,column);
for(int i = 0; i < row; i++){
for(int j = 0; j < column; j++){
printf("%d ",firstarray[i][j]);
}
printf("\n");
}
for(int i = 0; i < row; i++){
for(int j = 0; j < column; j++){
printf("%d ",secondarray[i][j]);
}
printf("\n");
}
return 0;
}
void scan_arrays (int *array, int row, int column){
for(int i = 0; i < row; i++){
for(int j = 0; j < column; j++){
scanf("%d",&array[i][j]);
}
printf("\n");
}
}```
I've only been coding for a couple of months.
1 ответ
Функция должна быть объявлена следующим образом:
void scan_arrays (int row, int column, int array[row][column]);
И аналогично для первой строки определения функции. Параметры row
и column
должны идти первыми, чтобы они могли использоваться в параметре array
. row
в измерении массива технически избыточен, но это простой способ самодокументирования кода.
Функция будет вызываться так:
scan_arrays(row, column, firstarray)
А остальная часть вашего кода может оставаться неизменной.
Было бы неплохо выполнить некоторую проверку пользовательского ввода перед определением массивов: это вызовет проблемы, если они введут мусор, 0
, отрицательные числа или большие числа, которые вызывают переполнение стека. Последней проблемы можно избежать с помощью динамического размещения:
int (*firstarray)[column] = malloc( sizeof(int[row][column]) );
if ( firstarray == NULL )
// ...error handling
И код, использующий firstarray
, может остаться без изменений.
Похожие вопросы
Связанные вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.