Динамічні масиви введені в 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; може працювати в рівній мірі і зі статичними, і з динамічних-ними масивами.Схожі статті