Если элементы массива
int buf[X][Y][Z]
расположены последовательно в памяти без пробелов, вы можете вычислить позицию с помощью
&buf[x][y][z] == (int *) buf + z + y * Z + x * Y * Z
Следующий код работает на большинстве систем и компиляторов. I работал (я не проверял все), но я не знаю, является ли это неопределенным или неопределенным поведением.
#include <iostream>
int main() {
int buf[2][2][2] = {{ {{1}, {2}}, {{3}, {4}} }, { {{5}, {6}}, {{7}, {8}} }};
std::cout << &buf[0][1][1] << '\n';
std::cout << (int *) buf + 0 * 2 * 2 + 1 * 2 + 1 << '\n';
}
Может быть, это поможет вам узнать, что buf[x][y][z]
является синтаксическим сахаром для *(*(*(buf + x) + y) + z)