Динамічний масив і його особливості
Масивом в загальному випадку називають упорядкований набір елементів, кожен з яких має певний (один і той же) тип. Масиви бувають статичними і динамічними. Довжина першого задається на етапі програмування, тобто перед початком запуску програми на виконання, другого - по ходу виконання.
Для статичного масиву при описі має бути визначено кількість елементів, яке протягом роботи програми не можна змінити (збільшити або зменшити). При запуску програми, що використовує статичний масив, на виконання в оперативній пам`яті виділяється деяка кількість байт для зберігання його елементів. Цей обсяг пам`яті буде закріплений за програмою доти, поки вона не закінчить свою роботу. Навіть якщо ця пам`ять не буде використовуватися, ніякий інший програмний код не зможе отримати до неї доступ.
Мова програмування Pascal може працювати тільки зі статичними масивами. Тому, якщо потрібно працювати з послідовністю змінної довжини, можна описати структуру, наприклад, зі ста елементів, і використовувати на різних етапах різну кількість елементів, що не перевищує число 100. А це, звичайно, нерозумно.
Такої проблеми не існує в інтегрованому середовищі розробки Delphi. Динамічний масив дозволяє при описі не вказувати кількість елементів, а визначати його під час виконання програми. Динамічний масив можна описати в розділі Var наступним чином:
Var Massive: array of integer
Таким чином, структура, позначена ідентифікатором Massive, являє собою лінійну целочисленную послідовність невідомою (поки що!) Довжини. Щоб задати розмір, в програмі необхідно застосувати процедуру SetLength, наприклад, SetLength (Massive, 9). Динамічний масив Massive знайде розмірність, рівну числу 9. Тепер визначено, що в послідовності присутні дев`ять елементів цілого типу, пронумеровані від нуля. Такими особливостями володіє динамічний масив. Delphi має процедуру, яка звільняє пам`ять від набору чисел, коли потреба в їх зберіганні відпала. Це процедура Finalize, в нашому випадку вона буде застосована таким чином: Finalize (Massive).
Подібним чином можна описувати і застосовувати багатовимірні динамічні масиви в Delphi. Наприклад, двовимірна динамічна структура буде описана так:
Var Massive: array of array of integer
При необхідності стовпці матриці можуть бути різної довжини. Це також задається процедурою SetLength.
Часто буває, особливо в великих і складних програмах, що деякі структури даних використовуються час від часу або тільки на початку / кінці роботи програми. При цьому було б дуже марнотратним тримати місце в оперативній пам`яті «про запас». Динамічний масив - один із способів раціонального розподілу ресурсів обчислювальної системи. Хоча і володіє деякими недоліками. По-перше, це не завжди зручна нумерація елементів з нуля. По-друге, програмісту потрібно постійно розуміти в кожній точці програмного коду, в якому стані знаходиться динамічний масив. Але його достоїнства роблять смішними всі ці труднощі. Зокрема, якщо потрібно передати з підпрограми дані великого обсягу, то без динамічного способу подання не обійтися.