Ну вот, опять знатоки советуют добавить звёздочек и указателей на указатели ):
Все примеры дальше передают в функцию трёхмерный массив и присваивают v значение его элемента p[1][2][3].
Если функция принимает массив фиксированных размерностей, то прямо так можно и написать:
int f(int p[][20][30])
{
int i = 1, j = 2, k = 3;
int v = p[i][j][k];
}
...
int p[10][20][30];
f(p);
Первую размерность (самую старшую) можно опустить.
Если же нет, то перед вами следующий выбор:
- у вас старый стандарт С (до С99) -- передавайте указатель на самый первый элемент и значения размерностей. Внутри функции пересчитывайте набор индексов многомерного массива в линейный индекс:
int f(int *p, int n2, int n3) // p[][n2][n3]
{
int i = 1, j= 2, k = 3;
int v = p[(((i * n2) + j) * n3) + k]; // v = p[i][j][k];
}
...
int p[10][20][30];
f(&p[0][0][0], 20, 30);
- у вас С99 или новее: воспользуйтесь поддержкой языка:
int f(int n2, int n3, int p[][n2][n3])
{
int i = 1, j = 2, k = 3;
int v = p[i][j][k];
}
...
int p[10][20][30];
f(20, 30, p);