Динамічні масиви одномірні динамічні масиви

Динамічні масиви введені в Object Pascal тільки почи-ва з Delphi 4. Вони відрізняються від звичайних статичних мас-вов тим, що в них не оголошується заздалегідь довжина - число елементів-тов. Тому динамічні масиви зручно використовувати в при-положеннях, де обсяг оброблюваних масивів заздалегідь неизв-стін і визначається в процесі виконання в залежності від дей-ствий користувача або обсягу інформації, що переробляється.

<имя> array of <базовый тип>

var A: array of integer;

оголошує змінну А як динамічний масив цілих чисел.

виділяє для масиву А місце в пам'яті під 10 елементів і заду-ет нульові значення всіх елементів.

Індекси динамічного масиву - завжди цілі числа, почи-нающіеся з 0. Таким чином, у наведеному прикладі масив з-тримає елементи від А [0] до А [9].

var A: array of integer;

Втім, усічення динамічного масиву краще проводити функцією Сору, привласнюючи її результат самому масиву. На-приклад, оператор

усікає динамічний масив А, залишаючи незмінними перші три його елемента.

Якщо динамічний масив вже розміщений в пам'яті, до змін-ної цього масиву можна застосовувати стандартні для масивів функції Length - довжина, High - найбільше значення індексу (очевидно, що завжди High = Length - 1) і Low - найменше значення індексу (завжди 0) . Якщо масив має нульову довжину, то High повертає -1, тобто при цьому виходить, що High

Сама змінна динамічного масиву є указат-лем на початок масиву. Якщо місце під масив ще не виділено, значення змінної одно nil. Але це не зовсім звичайний указу-тель. Його не можна разименовивать операцією ^, не можна передати в процедури New і Dispose.

Видалити з пам'яті динамічний масив можна одним з таких способів: присвоїти йому значення nil, використовувати функцію Finalize або встановити нульову довжину. Таким обра-зом, еквівалентні наступні оператори:

Якщо динамічні масиви визначені як змінні од-ного типу, наприклад

var А, В: array of integer;

і розмір масиву А чи не менше розміру масиву В або А = nil, то

можливо присвоювання виду

яке призводить до того, що змінна В починає вказувати на той же самий масив, що і А, тобто виходить ніби два псев-донімая для одного масиву. А вміст масиву В при цьому ті-ряется. У цьому корінна відмінність присвоювання статичних і динамічних масивів.

Якщо динамічні масиви оголошені не як змінні одного типу, тобто

var A: array of integer;

В: array of integer;

взагалі не допускається.

В операціях порівняння динамічних масивів порівнюються тільки самі покажчики, а не значення елементів масивів. Таким чином, вираз А = В поверне true тільки в разі, якщо А і В вказують на один і той же масив. А ось вираз А [0] = В [0] порівнює значення перших елементів двох масивів.

Динамічні масиви можуть передаватися в якості пара-метрів в ті функції і процедури, в описах яких пара-метр оголошено як масив базового типу без вказівки індексу, т. Е. Відкритий масив. Наприклад, функція

function CheckStrings (A: array of string): Boolean;

може працювати в рівній мірі і зі статичними, і з динамічних-ними масивами.

Схожі статті