Динамические массивы

Различают два способа распределения памяти: статическое - на этапе компиляции до выполнения программы, и динамическое -в ходе выполнения программы. По умолчанию массив, границы которого заданы константными выражениями, считается статическим. Память для размещения такого массива выделяется на этапе компиляции программы и сохраняется за ним на весь период выполнения программы. Например:

Dim Sigma(5) As Integer, m(3) As Single_

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

Одно из решений проблемы - выделять память под массив не на этапе комипиляции - статически, а после определения его размера - динамически (во время выполнения программы). В качестве размера массива может быть использована переменная, значение которой вычисляется или вводится перед объявлением массива:

РазмерМассива = Выражение или РазмерМассива = Cint(TextBoxl.Text) Dim ИмяМассива(РазмерМассива) As Tun_

Другое решение проблемы - разделить в программе объявление массива и определение его размера - выделение памяти под него, т. е. при объявлении массива размер не указывается:

I Dim ИмяМассиваС ) As Тип I

Причем значение размерности определяется позже (вычисляется или вводится) непосредственно перед его использованием, и тогда для выделения памяти уже объявленному массиву с указанием конкретной размерности массива используется оператор ReDim или ReDim Preserve:

ReDim ИмяМассива (РазмерМассива)

ReDim Preserve ИмяМассива (РазмерМассива)_

Таким образом, динамические массивы имеют весьма полезное свойство - их размеры могут изменяться в процессе выполнения программ. При этом оператор ReDim изменяет размер массива и очищает его (обнуляет его элементы), а оператор ReDim Preserve изменяет размер массива и сохраняет значения существующих элементов.

В следующем примере каждый раз при добавлении нового элемента к массиву происходит увеличение размера массива на единицу:

п = п + 1

ReDim Preserve Mas(n)

Mas(n) = n + 4_

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

[Dim Мас( ) As String :l5c-c ? ? динамического массива I

Затем, в момент необходимости реально распределить под него память используется оператор ReDim:

ReDim Мас(9)

' или

ReDim Preserve Mac(9)_

Второй вариант используется для изменения размера массива и для сохранения содержимого.

На рис. 7.4-7, рис. 7.4-9 и рис. 7.4-10 приведены примеры программных кодов, использующие динамические массивы.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >