Ответ 1
Поскольку массив будет распадаться на указатель и вычислять смещение к элементам массива, вам не нужно знать самое внутреннее измерение. Смещение до a[i][j][k]
равно i*nj*nk+j*nk+k
(где nj
и nk
- соответствующие размеры).
Почему мы можем опустить первое измерение многомерного массива, когда мы передаем его функции?
В моем классе программирования нам сказали, что при передаче многомерного массива в функцию мы можем опустить первую меру, например, a[10][15][20]
можно передать как a[][15][20]
.
Почему?
Поскольку массив будет распадаться на указатель и вычислять смещение к элементам массива, вам не нужно знать самое внутреннее измерение. Смещение до 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]);