Итак, я изучаю 2D массивы и обнаружил, что, поскольку они непрерывно хранятся так же, как 1D массив Почему индексация не конфликтует там?
Вот графическое представление моего двумерного массива
, и здесь я попытался имитировать c, как оно представлено в память.
Теперь предположим, что arr [0] [0] находится в ячейке памяти x0001 , тогда, когда я пытаюсь access arr [0] [3], который явно является не связанным индексом, как он показывает мне ошибку. Я использую следующую формулу для индексации - (n*m+c)+B
для индексации, где
- n = текущая строка
- m = Всего столбцов
- c = текущий столбец
- B = размер типа данных (для простоты предположим, что B = 1)
Теперь для обр [0] [3] и обр [ 1 ] [0] вывод формулы (n*m+c)+B
такой же ( 3 ), и если мы добавим это значение к начальному указателю (x0001) тогда мы получим тот же адрес памяти ( x0001 + 3 = x0004 ), тогда как оператор arr [ 1 ] [0] возвращает 13 (значение в x0004), но arr [0] [3] возвращает индекс из-за связанной ошибки.
Допущения
Поскольку у меня нет четкого представления о том, как память в 2D-массивах на самом деле работаю, я предполагал следующее
- Формула
(n*m+c)+B
практически используется вместо просто теоретического понимания того, как работает 2D-массив. - Адрес является непрерывным и отсчитывается от начального c то есть & обр. [0] [0] => ( x0001 )