в каком адресе памяти хранится элемент в многомерной матрице? - PullRequest
0 голосов
/ 24 мая 2019

Если массивы хранятся по строкам и char a [100] [100] [100] - это многомерный массив символов с [0] [0], который имеет адрес 0x1000, который является адресом [5] [5] [10]

Решение - 0xD54E, но я не знаю, как с этим справиться.

1 Ответ

0 голосов
/ 24 мая 2019

Элементы в многомерном массиве хранятся в старший порядок строк , что означает, что последовательные элементы по отношению к крайнему правому индексу будут последовательными в памяти.

Итак, если вы объявилии массив как

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 с).

...