Эта тема многомерного массива, к сожалению, сбивает с толку многих программистов на C ++. Ну, вот решение:
void generate_all_paths(int (*maze)[5], int size);
Вот так должно выглядеть объявление функции. Альтернатива, но полностью эквивалентная -
void generate_all_paths(int maze[][5], int size);
Оба создают параметр, который является указателем на массив из 5 целых чисел. Затем вы можете передать массив из 5 целых чисел в эту функцию:
generate_all_paths(arr, 5);
Поскольку первый элемент вашего массива представляет собой массив из 5 целых чисел, он будет автоматически (неявно) преобразован в указатель на этот первый элемент при передаче этой функции.
В комментариях вы показали, что привязаны к int**
, потому что и ваше внутреннее, и внешнее измерение должны иметь значения времени выполнения. Многомерный массив больше не может использоваться. Что вы можете сделать для целей тестирования, так это создать массив указателей, таких как:
int store[5 * 5] = { ..... };
int *arr[5] = { store, store + 5, store + 10, store + 15, store + 20 };
Тогда, на самом деле, вы можете сделать так, чтобы ваша функция принимала int**
. Поскольку первый элемент вашего массива - это int*
, он будет автоматически преобразован в int**
. Еще один способ сделать это - сохранить данные в двумерном массиве, а просто создать «представление», структурированное из указателей на этот массив:
int *arr[5] = { store[0], store[1], store[2], store[3], store[4] };
Где хранится ваш массив int[5][5]
. Так как store[n]
обращается к n-му подмассиву этого двумерного массива и его тип элемента равен int
, его преобразованный указателем тип равен int*
, который снова будет совместим.