Подтвердить что ты не робот

Почему мы можем опустить первое измерение многомерного массива, когда мы передаем его функции

Почему мы можем опустить первое измерение многомерного массива, когда мы передаем его функции?

В моем классе программирования нам сказали, что при передаче многомерного массива в функцию мы можем опустить первую меру, например, a[10][15][20] можно передать как a[][15][20].

Почему?

4b9b3361

Ответ 1

Поскольку массив будет распадаться на указатель и вычислять смещение к элементам массива, вам не нужно знать самое внутреннее измерение. Смещение до a[i][j][k] равно i*nj*nk+j*nk+k (где nj и nk - соответствующие размеры).

Ответ 2

Вы не можете передавать массивы в функции. Любая функция, объявленная как тип массива, автоматически настраивается для получения соответствующего типа указателя. Когда вы используете имя массива в выражении вызова функции, оно распадается на указатель на его первый элемент.

Эти четыре объявления объявляют одну и ту же функцию:

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]);