Если мы определяем arr[][], стек в оперативной памяти формируется с переменной с именем arr, которая хранит нулевое значение (т. е. ни на что не указывает).

Первое измерение, равное 4, обозначает строки, а второе, равное 5, обозначает столбцы, когда мы определяем этот массив как arr=new int[4][5].
Есть два способа выразить представление двумерного массива:

  • абстрактный вид
  • просмотр памяти

В абстрактном представлении видна сетка со строками и столбцами, каждая из которых начинается с индекса 0. Позиция каждой ячейки указывается внутри нее в формате «строка-столбец». Например, 2–1 обозначает ячейку в первом столбце, второй строке.

Если мы на самом деле рассматриваем arr=new int[4][5], мы понимаем, что это означает, что у нас есть массивы (1-D) размера 4 каждый. Теперь, если мы просто предположим, что arr хранится по адресу 4k, эти 4k хранят массив размера 4, и на каждом из этих 4 адресов присутствует массив размера 5.

Когда мы принимаем во внимание arr=new int[4][5,], мы обнаруживаем, что на самом деле это означает, что у нас есть 4 одномерных массива с общим размером 5. Предположим, что ячейка 1k — это место, где хранится массив arr. . По каждому из этих четырех адресов этот 1k имеет массив размера 4 и массив размера 5.

Вы понимаете, что мы фактически создаем пять массивов, когда объявляем предоставленный массив? КАК? Пятый массив, содержащий адреса (2k, 3k и 4k) первых четырех массивов, имеет размер 16 байт, а размер первых четырех массивов — 20 байт каждый. Таким образом, Arr представляет собой массив массивов.