Это объявляет массив MAXROWS
массивов указателей на int
.
int *data[MAXROWS][MAXCOLS];
Однако в определении функции массивы верхнего уровня (любого размера) эквивалентны указателям, потому что массивы всегда затухают до указателей на тип элемента массива при передаче в функцию.
То есть определение вашей функции эквивалентно:
void getInput (int *(*data)[MAXCOLS])
т.е.. указатель на массив MAXCOLS
указателей на int
.
Поскольку ваш код стоит, вы никогда не инициализируете ни один из int
указателей в массиве, поскольку вы передаете 2d-массив int
s в качестве указателя на 2d-массив int *
.
То, что вы, вероятно, хотите передать, это указатель на массив MAXCOLS
int
:
void getInput (int (*data)[MAXCOLS])
или эквивалентно:
void getInput (int data[][MAXCOLS])
Затем вы делаете следующее:
int main(void)
{
int data[MAXROWS][MAXCOLS];
getInput(data);
return 0;
}
Затем вы передаете свой 2d массив как указатель на его первый элемент (указатель на строку или массив MAXCOLS
int
s).
Если вы уверены, что изменение обязательно изменить:
scanf ("%d", data[curRow][curCol]);
printf ("%d\n", *data[curRow][curCol]);
до:
scanf ("%d", &data[curRow][curCol]);
printf ("%d\n", data[curRow][curCol]);
Также проверьте свои параметры здесь:
scanf ("%d %d", &rows, &cols);
Вы должны передавать указатели на rows
и cols
.
Обязательно добавьте некоторую проверку границ в функцию ввода, чтобы не пытаться читать больше строк и столбцов, чем MAXROWS
или MAXCOLS
.