Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB_6.doc
Скачиваний:
97
Добавлен:
01.12.2018
Размер:
3.77 Mб
Скачать

4.3. Статические и динамические массивы.

Рассмотренные выше массивы, размерность которых указывается в операторе Dim, называются статическими. Их размерность остается постоянной во все время выполнения приложения.

Оперативная память под переменные, выделяется на этапе компиляции. Для числовых данных и строк фиксированной длины она заполняется нулями, а для строк переменной длины - пробелами. Под массивы память выделяется так же, как и под переменные. Эта память занимается массивом во всё время выполнения программы. Часто заранее неизвестно количество элементов в массиве или их количество должно быть разным в разное время, либо остро стоит вопрос об экономии оперативной памяти и целесообразно её вернуть на другие нужды после того, как массив обработан. В таких случаях используются динамические массивы, размерность которых устанавливается в процессе выполнения программы. Для изменения размерности массива используется оператор ReDim. Его синтаксис:

ReDim [Preserve] <имя массива> (<индексы>) [As <имя типа>]

Необязательный параметр Preserve позволяет сохранять значения элементов массива при изменении его размерности. Если этот параметр отсутствует, то массив будет инициирован заново: его размерность изменится, а все данные будут уничтожены. С параметром Preserve все данные сохранятся в массиве новой размерности. При изменении размерности массива тип его элементов останется таким, каким был указан первоначально в операторе Dim, даже если в операторе ReDim указать другой тип.

Динамические массивы сначала объявляются оператором Dim без указания размерности (т.е. с пустыми скобками): Dim A%(). Затем вводится или вычисляется его размерность:

m = InputBox (“Введите размерность массива”)

После этого оператором ReDim устанавливается его размерность: ReDim A(1 To m) или, например:

n = r*s

ReDim A(1 To n)

В отличие от оператора Dim, в операторе ReDim можно использовать переменную, как для нижней, так и для верхней границы индек-

сов. Например:

Dim M() As Single

i = Inputbox (“Введите нижнюю границу индексов”)

j = Inputbox (“Введите верхнюю границу индексов”)

ReDim M(i To j)

Оператор изменения размерности массива ReDim может применяться к одному и тому же массиву сколько угодно раз в одном и том же фрагменте кода программы. При объявлении нового размера массива с использоваием ключевое слово Preserve можно изменять только значение верхней границы его последней размерности.

Изменять размерность статического массива, то есть объявленного оператором Dim с заданными границами индексов, запрещается.

Замечание: массив определяется как совокупность однотипных элементов. Однако, если любой массив, статический или динамический, объявлен без указания типа его элементов, то система присвоит ему тип Variant. Тогда элементы такого массива могут быть разнотипными: одни из них могут быть числами, другие строками и т.д.

После того, как динамический массив обработан, можно, при необходимости, оператором Erase освободить занимаемую массивом память:

Erase <список имен динамических массивов>

Этот оператор уничтожит все перечисленные в списке динамические массивы.

Если динамический массив используется в нескольких процедурах, он должен быть объявлен в разделе General экранной формы.

Элементы одного динамического массива можно передать другому динамическому массиву, независимо от того, совпадают ли значения их размерностей и количество элементов в каждой размерности. M = A. Размерность и число элементов массива М при необходимости автоматически изменится.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]