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

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

В моем классе программирования нам сказали, что при передаче многомерного массива в функцию мы можем опустить первое измерение, например, 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]);
Другие вопросы по тегам