Я пытаюсь сделать функцию, которая инициализирует 2D-массив в стек переполнения

IDE выдает мне эту ошибку, когда я пытаюсь скомпилировать:

random.h|11|error: expected ',' or '...' before 'arr'|
среди других, но это та, которая является моей самой большой проблемой.

Я могу сделать это в своей основной функции, но я хочу сделать это, вызвав функцию, которая инициализирует любой двумерный массив, который я ему предоставлю. Тогда у меня есть другая функция для печати массива, но они более или менее это то же самое, за исключением операторов.
Я начинающий, так что не стесняйтесь посмеяться!

    void InitializeArray2D(int& arr[int x][int y])
{
for (int i=0; i<x; i++)
{
for(int j=0; j<y; j++)
{
cout<<"arr["<<i<<"]["<<j<<"]=";
cin>>arr[i][j];
}
}
}

0

Решение

по факту

int& arr[x][y]

(Я удалил синтаксические неверные спецификаторы типов x и y) — это объявление указателя на массив ссылок. C ++ не позволяет объявлять массивы ссылок.

Правильная декларация будет

void InitializeArray2D(int ( & arr )[x][y]);

при условии, что x и y определены как постоянные.

1

Другие решения

Смеется в сторону, ваш прототип функции очень искажен.

Вы хотите что-то более похожее на:

void InitializeArray2D(int &arr[][], int x, int y) {
}

или же

void InitializeArray2D(int **arr, int x, int y) {
}

Примечание: это предполагает, что ваш массив уже выделен

Кроме того, сделайте себе одолжение и сделайте свой внешний цикл y и внутренний цикл x не то, чтобы это имело большое значение, но это облегчает визуализацию.

Редактировать:
Как любезно и точно указал Эд С., использование x в качестве внутреннего цикла имеет значение с точки зрения локальности данных. Привыкайте делать это раньше, а не позже.

0

По вопросам рекламы [email protected]