динамічні масиви

У FreePascal, Delphi додана цікава можливість опису масивів без вказівки розмірностей і, відповідно, меж зміни індексів:

var IntArray: array of integer;

Багатовимірні динамічні масиви описуються саме як масиви масивів. Наприклад, двовимірний:

type T3DinArray = array of array of Integer; var A. T3DinArray;

Такі масиви є динамічними і спочатку мають нульову довжину. Установка розміру масиву і визначення його під час виконання програми проводиться так само як і для рядків, за допомогою функцій SetLength і Length. відповідно. Елементи в даному випадку нумеруються від нуля.

// У програмі спочатку задається розмір по першому вимірюванню (кількість стовпців): SetLength (A, 3); // Потім задається розмір другого виміру для кожного з трьох стовпців, наприклад: SetLength (A [0], 3); SetLength (A [1], 2); SetLength (A [2], 1);

Таким чином створюється трикутна матриця:

Звільнити пам'ять, зайняту масивом, можна використовуючи той же оператор SetLength, вказавши нульове кількість елементів, або за допомогою команди

Примітка. привласнення значення nilосвобождает пам'ять тільки у динамічних масивів Delphi. Для звичайних покажчиків звільнення пам'яті не проводиться, що може привести до так званої "витоку" пам'яті.

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

Схожі статті