Предположим, у вас есть массив
char arr[3][4];
и определите функцию как
void board(char mat[][4])
Массив распадается на указатель, поэтому, если функция хочет получить доступ к mat[2][1]
, тогдасмещение от указателя будет строка x ширина + столбец элементов, поэтому 2 * 4 + 1 = 9
.Обратите внимание, что массивы всегда являются смежными, независимо от того, сколько измерений.
Но если вы определите функцию как
void board(char mat[][])
, тогда нет информации, кроме указателя, и компилятор понятия не имееткак индексировать массив.
Причина, по которой данное измерение должно быть числом столбцов, заключается в том, что именно так массив располагается в памяти, строка за строкой.