Хотя многомерные массивы уже давно являются гражданами второго сорта в C, современные версии дают им гораздо лучшую поддержку. Если размеры массива включены до фактического массива в список параметров функции, они могут формировать измерения этого массива. Обратите внимание, что A
и B
теперь являются последним параметром для функции f()
:
void f(int w, int h, int m[w][h]);
int main()
{
int A[3][3]={{1,2,3},{4,5, 6},{7,8,9}};
int B[3][2]={{1,2},{3, 4}, {5, 6}};
f(3, 3, A);
f(3, 2, B);
return 0;
}
void f(int w, int h, int m[w][h])
{
int n[w][h];
int i, j;
for(int i;i<w;i++)
{
for(int j;j<h;j++)
n[i][j] = m[i][j] + 1;
printf("%5d", m[i][j]);
}
}
Я не помню, какая версия C ввела это, но дляубедитесь, что параметр int **m
указан неверно, поскольку m
не является указателем на указатель (или массив указателей).
Также важно, чтобы этот синтаксис не заставлял массивы перераспределяться в соответствии ск параметрам, поэтому, если массив равен [10][3]
, когда вы определяете его, он должен быть [10][3]
, когда вы описываете его функции. Это синтаксический сахар только для доступа к массиву.