можем ли мы напрямую получить доступ к более глубоким элементам массива, если мы знаем адрес памяти? - PullRequest
0 голосов
/ 13 июля 2020

В logi c для трехмерного массива нам нужно сначала получить доступ к внешнему массиву и проложить себе путь внутри каждого измерения и получить доступ к элементу массива. Поскольку физическая память хранит массивы в виде блока памяти независимо от его размеров, можем ли мы получить прямой доступ, используя его адрес, поскольку есть способы получить местоположение памяти?

Если многомерный массив хранится в физической памяти как 1d-массив, можем ли мы напрямую получить доступ к более глубоким элементам массива, если мы знаем адрес памяти?

1 Ответ

0 голосов
/ 13 июля 2020

Вы, безусловно, можете увидеть трехмерный массив int arr[a][b][c] как «сплющенный» одномерный массив int flattened[a * b * c] и получить доступ к его элементам соответственно.

int arr[3][4][5];

int * flattened = &arr[0][0][0];

Элемент arr[i][j][k] будет соответствовать flattened[b * c * i + c * j + k]

Это даже четко определенное поведение, поскольку элементов массива гарантированно непрерывны в памяти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...