Как передать двумерный массив функции?

Для передачи двумерного массива в функцию в языке C можно воспользоваться указателями и указывать размеры массива.

Сначала необходимо объявить функцию с параметром-указателем на двумерный массив и указать размеры массива в квадратных скобках:

void myFunction(int (*arr)[N], int rows, int cols) {
  // тело функции
}

Здесь arr - это указатель на двумерный массив, параметр rows - количество строк в массиве, а параметр cols - количество столбцов в массиве. Здесь N - это константа или переменная, определяющая количество столбцов массива.

Теперь можно передать двумерный массив в эту функцию. Для этого создаем массив и вызываем функцию, передавая ей указатель на массив и его размеры:

int main() {
  int arr[N][M];  // объявляем двумерный массив
  // заполняем массив данными
  
  myFunction(arr, N, M);  // вызываем функцию и передаем массив

  return 0;
}

Внутри функции myFunction можно обращаться к элементам массива, используя указатель arr. Например, для доступа к элементу [i][j] массива можно использовать следующую запись: arr[i][j].

Заметьте, что при передаче двумерного массива в функцию используется указатель на тип элементов массива и указываются только размеры массива. Это связано с тем, что в памяти двумерный массив хранится как одномерный массив и доступ к элементам осуществляется по формуле arr[i * кол_столбцов + j], где i - номер строки, а j - номер столбца. Используя указатель на тип элементов массива, компилятор сам будет осуществлять вычисления указателей и доступ к элементам массива.