Динамічні змінні

Динамічної змінної називається змінна, пам’ять для якої виділяється під час роботи програми.
Виділення пам’яті для динамічної змінної здійснюється викликом процедури new. У процедури new один параметр – покажчик на змінну того типу, пам’ять для якої треба виділити. Наприклад, якщо р є покажчиком на тип real, то в результаті виконання процедури new (p); буде виділена пам’ять для змінної типу real (створена змінна типу real), і змінна-вказівник р міститиме адресу пам’яті, виділеної для цієї змінної.

У динамічної змінної немає імені, тому звернутися до неї можна тільки за допомогою покажчика.
Процедура, яка використовує динамічні змінні, перед завершенням своєї роботи повинна звільнити займану цими змінними пам’ять або, як кажуть програмісти, знищити динамічні змінні. Щоб звільнити пам’ять, займаної динамічної змінної, використовується процедура Dispose, яка має один параметр – покажчик на динамічну змінну.
Наприклад, якщо р – покажчик на динамічну змінну, пам’ять для якої виділена інструкцією new (p), то інструкція dispose (р) звільняє займану динамічної змінної пам’ять.
Наступна процедура (Її текст приведений в лістингу 8.3) демонструє створення, використання і знищення динамічних змінних.

Лістинг 8.3. Створення, використання і знищення динамічних змінних

procedure TForm1.Button1Click (Sender: TObject); var
p1, p2, p3: Integer; // покажчики на змінні типу integer
begin
// створимо динамічні змінні типу integer

// (Виділимо пам'ять для динамічних змінних)

New (p1);

New (p2);

New (p3);
р1 ^ : = 5;
р2 ^ : = 3;
р3 ^ : = Р1 ^ + р2 ^;
ShowMessage ( 'Сума чисел дорівнює '+ IntToStr (р3 ^));
// знищимо динамічні змінні
// (звільнимо пам'ять, займану динамічними змінними)
Dispose (p1);
Dispose (р2);
Dispose (р3);

end;

На початку роботи процедура створює три динамічні змінні. Дві змінні, на які вказують p1 і р2, отримують значення в результаті виконання інструкції присвоювання. значення третьої змінної обчислюється як сума перших двох