Обратите внимание, что в объявлении функции любой параметр типа массива преобразуется в параметр соответствующего типа указателя.
void printMatrix(int matrix[][3]);
объявляет ту же функцию, что и
void printMatrix(int (*matrix)[3]);
Параметр matrix
является указателем на массив из трех int
. Когда вы передаете A
в функцию, то фактически передается указатель на первый элемент массива, то есть a int (*)[3]
.
Это вычисление sizeof matrix / sizeof matrix[0][0]
дает размер указателя, деленный на размер int
, который не имеет ничего общего с количеством членов исходного массива. Это число не может быть определено из параметров, которые вы передаете. Вам нужно явно передать измерения вашего внешнего массива в функцию.
Когда вы объявляете массив (даже в объявлении функции, где он будет преобразован в тип указателя), тип элемента массива должен быть полным типом. Если вы не предоставите тип целочисленной константы для типа массива, этот массив имеет неполный тип. В вашем случае, поскольку int[]
является полным типом, тип int[][]
недопустим, вы должны указать все, но не более верхнего измерения, в многоуровневом массиве типа массивов.
Если вы используете функции C99 (обратите внимание, что они не совместимы с C ++), то вы можете использовать массив переменной длины (VLA), но в определении функции длина внутреннего массива параметра массива должна все равно передается в качестве дополнительного параметра.
1025 * Е.Г. *
void printMatrix(int leni, int lenj, int[][lenj])
{
// ...
}