русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-08-31; просмотров: 964; Нарушение авторских прав


Динамический массив объявляется без указания границ:

array of baseType

Например:

var DynArray: array of Integer;

Работа с динамическими массивами:

1. Переменная DynArray представляет собой ссылку на размещаемые в динамической памяти элементы массива.

2. Изначально память под массив не резервируется, количество элементов в массиве равно нулю, а значение переменной DynArray равно nil.

3. Создание динамического массива (выделение памяти для его элементов) осуществляется процедурой SetLength.

SetLength(DynArray, 50); // Выделить память для 50 элементов

4. Изменение размера динамического массива производится этой же процедурой:

SetLength(DynArray, 100); // Теперь размер массива 100 элементов

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

При уменьшении размера динамического массива лишние элементы теряютяся.

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

5. Определение количества элементов производится с помощью функции Length:

N := Length(DynArray); // N получит значение 100

6. Элементы динамического массива всегда индексируются от нуля.

7. Доступ к ним ничем не отличается от доступа к элементам обычных статических массивов:

DynArray[0] := 5; // Присвоить начальному элементу значение 5DynArray[High(DynArray)] := 10; // присвоить конечному элементу значение 10

8. К динамическим массивам, как и к обычным массивам, применимы функции Low и High, возвращающие минимальный и максимальный индексы массива соответственно. Для динамических массивов функция Low всегда возвращает 0.



9. Освобождение памяти, выделенной для элементов динамического массива, осуществляется установкой длины в значение 0 или присваиванием переменной-массиву значения nil (оба варианта эквивалентны):

SetLength(DynArray, 0); // Эквивалентно: DynArray := nil;

Однако Вам вовсе необязательно по окончании использования динамического массива освобождать выделенную память, поскольку она освобождается автоматически при выходе из области действия переменной-массива (удобно, не правда ли!). Данная возможность обеспечивается механизмом подсчета количества ссылок.

10. При присваивании одного динамического массива другому, копия уже существующего массива не создается.

Var A, B: array of Integer;begin SetLength(A, 100); // Выделить память для 100 элементов A[0] := 5; B := A; // A и B указывают на одну и ту же область памяти! B[1] := 7; // Теперь A[1] тоже равно 7! B[0] := 3; // Теперь A[0] равно 3, а не 5!End.

В приведенном примере, в переменную B заносится адрес динамической области памяти, в которой хранятся элементы массива A (другими словами, ссылочной переменной B присваивается значение ссылочной переменной A).

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

var A, B: array of Integer;begin SetLength(A, 100); // Выделить память для 100 элементов A[0] := 10; B := A; // B указывает на те же элементы, что и A A := nil; // Память еще не освобождается, поскольку на нее указывает B B[1] := 5; // Продолжаем работать с B, B[0] = 10, а B[1] = 5 B := nil; // Теперь ссылок на блок памяти нет. Память освобождаетсяEnd;

11. Для работы с динамическими массивами вы можете использовать знакомую по строкам функцию Copy. Она возвращает часть массива в виде нового динамического массива.

12. Для многомерных динамических массивов:

Var A: array of array of Integer; begin SetLength(A, 100); // Выделить память для 100 элементов for I := Low(A) to High(A) do SetLength(A[I], I);End.

То есть память выделяется для каждой размерности.

 



<== предыдущая лекция | следующая лекция ==>
Динамические массивы | Собственный капитал банка


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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