Рассмотрим массив массивов. Т.е.
массив, элементы которого в свою очередь являются массивами. Такая конструкция
в Паскале возможна, т.к. никаких ограничений на тип элементов (кроме принадлежности
к одному и тому же типу) не накладывается:
m:
array [1 .. 3] of array
[1 .. 2] of integer;
Попробуем разобраться. Первая часть
описания: array [1
.. 3] of ... указывает на то, что речь идет о массиве
m из 3
элементов (домов). Из второй части выясняется,
что элементы m[1], m[2] и m[3] в свою очередь тоже являются массивами
типа array
[1 .. 2] of integer.
Следовательно,
транслятор, встретив такое объявление переменной m,
выделит в памяти 3 блока, каждый из которых в свою очередь будет состоять из
двух (всего: 3*2=6) ячеек (квартир) типа integer
(три двухквартирных дома - негусто):
1
|
2
|
3
|
<-
|
первый
индекс (дом)
|
||||||||||||
|
|
|
<-
|
второй
индекс (квартира)
|
Ясно, что для указания на элемент, выделенный цветом, надо к обычному указанию на элемент "внешнего" массива m[2] (номеру дома) добавить еще и "внутренний" индекс интересующей нас компоненты (номер квартиры): m[2][1].
Итак, с помощью вышеприведенного описания объявляются cледующие шесть переменных: m[1][1], m[1][2], m[2][1], m[2][2], m[3][1], m[3][2].
С точки зрения программиста эти переменные удобнее представить в виде прямоугольной таблицы, где две компоненты каждого из трех "внешних" элементов располагаются в одной строке:
1
|
2
|
|
1
|
m[1][1]
|
m[1][2]
|
2
|
m[2][1]
|
m[2][2]
|
3
|
m[3][1]
|
m[3][2]
|
Таким образом, для указания элемента прямоугольной таблицы, надо использовать два индекса: номер строки (дом) и номер столбца (квартира), на пересечении которых находится элемент.
Возвращаясь к описанию, отметим,
что в Паскале допускается сокращенная форма объявления прямоугольного
(двумерного) массива:
m: array [1 .. 3,
1
.. 2] of integer;
в которой просто указывается диапазон
изменения каждого индекса (возможные номера строк и столбцов) и тип элементов.
Возможна и более компактная форма обращения к отдельному элементу массива: вместо m[2][1] можно писать m[2, 1], указав в одинарных квадратных скобках номер строки и номер столбца (именно в таком порядке), на пересечении которых находится элемент.