Массивы переменной длины
 
Изменение размера однородных структурных данных.

Обзор

Массивы переменной длины - это массивы, у которых во время выполнения программы можно изменить кол-во индексов элементов или кол-во измерений. Память, используемая массивом переменной длины для хранения его элементов, выделяется во время выполнения в свободном хранилище (куче), в отличие от массивов фиксированной длины, чьи данные либо размещаются в стеке программы , либо в секции .BSS либо в секции .DATA , в зависимости от того, были ли они определены с ключевым словом Static.

Декларация и определение

Массив переменной длины декларируется с ключевым словом Extern, за которым следует идентификатор переменной, и далее пустые скобки, либо указанный диапазон, и завершает декларацию тип данных. Для декларации массива переменной длины используется либо пустой список диапазонов, либо один или более диапазонов , индексы которых должны иметь не постоянные значения - то есть, диапазоны должны быть указаны переменными или объектами, конвертируемыми в Integer .

Dim maxLowerBound As Integer = -5
Dim maxUpperBound As Integer = 10

'' Объявляет двумерный массив переменной длины с элементами типа STRING ..
Extern arrayOfStrings(maxLowerBound To maxUpperBound, 20) As String

'' Объявляет одномерный массив переменной длины с элементами типа BYTE ..
Extern arrayOfBytes() As Byte

Массив переменной длины определяется с помощью ключевых слов  Dim или ReDim, по той же форме, что декларация. Ключевое слово ReDim всегда определяет массивы переменной длины, вне зависимости указано значение диапазонов или нет. Переменной длины массивы не могут быть определены со статической памятью с использованием Static.

'' Определяет одномерные массивы переменной длины типа SHORT и INTEGER ..
Dim arrayOfShorts() As Short
ReDim arrayOfIntegers(9) As Integer

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

Изменение размера

Изменение размера переменной длины массива относится к «переопределению» массива с разными значениями для его индексного диапазона, позволяя массиву увеличиваться или уменьшаться. Стираются элементы вне нового индексного диапазона; элементы объекта будут уничтожены. Если массив увеличивается в размере, то новые элементы добавляются и инициализируется со значение null; элементы объектов, построенные по умолчанию. Массивы переменной длины изменяются с помощью ключевого слова ReDim по той же форме, как и определение.

'' Определить пустой массив переменной длины Single элементов...
Dim array() As Single

'' Переопределение массива с 10 элементами Single
ReDim array(9) As Single

По умолчанию значения элементов массива переменной длины теряются при изменении размеров - массив будет содержать ноль или более элементов, инициализированные нулем или значением null, или если элементы являются объектами, они будут построены по умолчанию. Чтобы сохранить предыдущие значения элементов во время изменения размера, используйте ключевое слово Preserve.