int a[5][5]; //is an 2d int array
Когда массивы передаются в функцию, на самом деле передается указатель на первый элемент массива.
Таким образом, вызов функции fun()
с fun(a)
фактически передаст указатель на первый элемент a
, в данном случае это массив типа int размером 5. Функция fun()
получит указатель на массив типа int размером 5, то есть int (*b)[5]
. Обратите внимание, что int *b[5]
- это не то же самое, и это массив размера 5, содержащий указатели int.
Ваша fun
функция может иметь:
void fun(int b[][5])
или
void fun(int (*b)[5])
Первый способ сделать это гласит, что функция получит двумерный массив целых чисел, но поскольку мы знаем, что в действительности функция будет отправлена функции, это указатель на первый элемент массива a
, компилятор тихо скомпилирует функцию, как если бы параметр был указателем, так как это указатель, который она получит.
Второй способ сделать это явно показывает, какой тип он получит, указатель на массив размером 5.