Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП Технология программирования.doc
Скачиваний:
20
Добавлен:
11.06.2015
Размер:
1.69 Mб
Скачать

Массивы и их организация в памяти. Многомерные массивы, матрицы

Массив является объектом специального типа Array (т.е. массив). Он состоит из элементов, проиндексированных, начиная с 0 (т.е., первый элемент массива имеет индекс 0, второй – индекс 1 и т.д.).

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

Литерал массива содержит в квадратных скобках перечень его элементов (в порядке индексации). Элементы задаются выражениями (см. п.11) и отделяются друг от друга запятой. Запятые определяют количество элементов массива, а выражения – значения элементов. Допускается отсутствие любого количества выражений («пустые места»). Тогда значения соответствующих элементов считаются неопределёнными (значение undefined).

Например, следующий литерал

[1+2,"Чепуха!",,["1+2",],5]

изображает массив, элементы которого перечислены в таблице:

Индекс элемента

Значение элемента

0

Число 3 (значение выражения 1+2)

1

Строка Чепуха!

2

Значение undefined

3

Массив из двух элементов, заданный литералом ["1+2",]. Его первый элемент – строка1+2(а не число), значение второго элемента не опреде­лено (undefined).

4

Число 5

Впамяти массив изn элементов представляется, как показано на рис. 2.

Рис. 2. Представление массива в памяти

Для обеспечения быстрого доступа к элементам массива по индексу его представление включает массив из n последовательных ячеек одинаковой длины, каждая из которых содержит либо значение соответствующего элемента, либо ссылку на него. Дескриптор массива содержит длину этого массива и ссылку на него. Эта ссылка позволяет динамически добавлять к массиву новые элементы (см. п. 10), создавая новый массив ссылок.

Для каждого литерала массива в памяти создаётся отдельное представление. Поэтому два одинаковых литерала определяют два массива с одинаковыми элементами, но занимающих разные места в памяти. Поэтому они считаются разными массивами. Так, в результате выполнения операторов

x=[1,2]; y=[1,2]

создаётся два разных массива с одинаковыми элементами. Так что значения переменных (ссылки на дескрипторы массивов) будут различны.

В результате же выполнения операторов

x=[1,2]; y=x

создаётся только один массив и ссылка на его дескриптор присваивается обеим переменным, так что обе они имеют одно и то же значение.

На рис. 3 изображено представление рассмотренного выше массива[1+2,"Чепуха!",,["1+2",],5].

Рис. 3. Представление в памяти массива [1+2,"Чепуха!",,["1+2",],5]

Многомерный массив – это массив, элементами которого являются массивы. Массив, элементы которого не являются массивами (обычный массив), называется одномерным массивом. Массив, элементы которого – одномерные массивы, называется двумерным массивом. Вообще, массив, элементы которого являются n-мерными массивами, называется (n+1)-мерным массивом.

Элементы двумерного массива называются строками. Если все строки имеют одинаковую длину, массив называется матрицей (вообще говоря, прямоугольной). Если количество строк матрицы совпадает с их длиной, матрица называется квадратной. Двумерный массив, у которого длины строк не одинаковы, называется ступенчатым. Ниже приведены примеры таких массивов (первая цифра элемента массива – номер строки, вторая – номер строки):

Прямоугольная матрица

Квадратная матрица

Ступенчатый массив

[[00, 01, 02, 03],

[10, 11, 12, 13],

[20, 21, 22, 23]]

[[00, 01, 02],

[10, 11, 12],

[20, 21, 22]]

[[00, 01, 02],

[10, 11, 12, 13],

[20, 21]]