Элементы в многомерном массиве хранятся в старший порядок строк , что означает, что последовательные элементы по отношению к крайнему правому индексу будут последовательными в памяти.
Итак, если вы объявилии массив как
char a[L][M][N];
элемент a[0][0][0]
будет по данному адресу ad
,
элемент a[0][0][1]
будетad ad+1
,
элемент a[0][1][0]
будет в ad+N
, поскольку N - размер строки
элемент a[1][0][0]
будет ad+M*N
и a[i][j][k]
по адресу ad+i*M*N+j*N+k
Для вашего примера i = 5, j= 5, k = 10, N = M = M = 100
100 * 100 * 5 + 100 * 5 + 10 = 50510 = 0xc54de
Как адрес элемента a[0][0][0]=0x1000
, одиннеобходимо добавить его к предыдущему значению, которое дает ответ.
Обратите внимание, что формула i*M*N+j*N+k
дает порядок элемента ikj в памяти.Для преобразования, если в адресе, для массива элементов с типом, отличным от char, он должен умножить размер элемента.(например, 4 для массива int
с или float
с).