Почему мы можем опустить первое измерение многомерного массива, когда передаем его функции
Почему мы можем опустить первое измерение многомерного массива, когда передаем его функции?
В моем классе программирования нам сказали, что при передаче многомерного массива в функцию мы можем опустить первое измерение, например, a[10][15][20]
может быть передан как a[][15][20]
,
Зачем?
2 ответа
Поскольку массив будет распадаться на указатель и вычислять смещение к элементам массива, вам не нужно знать внутреннее измерение. Смещение в a[i][j][k]
является i*nj*nk+j*nk+k
(где nj
а также nk
соответствующие размеры).
Вы не можете передавать массивы в функции. Любая функция, объявленная как принимающая тип массива, автоматически настраивается на соответствующий тип указателя. Когда вы используете имя массива в выражении вызова функции, оно распадается на указатель на его первый элемент.
Эти четыре объявления объявляют одну и ту же функцию:
void f(int b[10][15][20]);
void f(int (*b)[15][20]);
void f(int b[][15][20]);
void f(int b[100][15][20]);
и, учитывая int a[10][15][20];
эти вызовы функций идентичны:
f(a);
f(&a[0]);