Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

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

Для реализации всего вышеизложенного нам поможет инструкция ReDim. Сначала может быть описан динамический массив, например, так:

Dim имямассива () [As type]

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

ReDim имямассива (границы) [As type]

Ключевое место в этой инструкции – описание границ изменения индексов. Это описание выглядит следующим образом:

[нижняяграница to] верхняяграница, [нижняяграница to] верхняяграница, …

Для каждого индекса можно задать начальное и конечное значение. Если не задавать начальное, то оно определяется по умолчанию (указано в настройках) либо задается при помощи инструкции Option Base.

Option base 1 'установка нижней границы индексов по умолчанию = 1.

Dim Lower

Dim MyArray(20), TwoDArray(3, 4)

Dim ZeroArray(0 To 5) ' здесь явно указаноа нижняя граница индекса.

Lower = LBound(MyArray) ' функция возвращает значение нижней границы массива =1

Lower = LBound(TwoDArray, 2) ' вернет 1.

Lower = LBound(ZeroArray) ' вернет 0.

Можно переописывать массив неоднократно.

ReDim [Preserve] имямассива (границы) [As type]

Здесь важно, что можно изменять границы индексов. Но самое интересное это то, что можно потребовать сохранить все значения в «старых» элементах (Preserve). При применении слова Preserve можно изменять только последнюю размерность.

ReDim X(10, 10, 10)

...

ReDim Preserve X(10, 10, 15)

Еще один важный момент: память, выделенная под статический массив, то есть массив, количество элементов которого задано в инструкции Dim, освобождается только по завершению процедуры или функции, в которой этот массив описан. Если массив описан на уровне модуля, то память, занятая им, освобождается по закрытию документа. Такая расточительность кажется неприемлемой. Для динамических массивов есть замечательная инструкция Erase, которая освобождает память, занятую массивом.

<== предыдущая лекция | следующая лекция ==>
 | Базовые понятия ООП
Поделиться с друзьями:


Дата добавления: 2013-12-12; Просмотров: 347; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.