Принцип динамічної організації пам’яті полягає у тому, що для змінних надається пам’ять за необхідністю (за вказівкою програміста). Далі ці змінні опрацьовують і в потрібний момент пам’ять вивільняють (знову за вказівкою програміста). Такі змінні називаються динамічними.
Для роботи з динамічними змінними використовують вказівники. Для виділення динамічної пам’яті застосовується команда new так:
<тип вказівника> *<назва> = new <тип змінної>;
|
Дія команди new. Для відповідного типу змінної автоматично надається необхідна неперервна ділянка пам’яті. Команда new повертає обсяг цієї ділянки, а вказівник вказує на її початок. Наприклад, щоб зарезервувати у пам’яті комп’ютера область для зберігання значення цілого типу, застосовують таку команду:
int*prt2 = new float(3.14);
У адресу, на яку показує prt2, буде занесене число 3,14.
З динамічною змінною можна виконувати операції, визначені для даних відповідного базового типу.
Після опрацювання динамічних змінних пам’ять необхідно вивільнити, а відповідний вказівник занулити. Якщо цього не зробити, то пам’ять можна вичерпати. Вивільняють пам’ять за допомогою команди
delete <назва вказівника>;
|
Щоб вказівник не вказував на жодну ділянку пам’яті, його необхідно занулити такою командою:
<назва вказівника> = NULL;
|
Значенням (адресою) такого вказівника буде нульова адреса 0х00000000. Тут не можна бути розміщене значення жодного даного.
Довідка. Замість значення NULL можна записати <назва вказівника> = 0.
Приклад 7. Розглянемо, як відбувається розподіл пам’яті. Надамо пам’ять для двох змінних цілого типу та присвоїмо їм деякі значення. Пізніше вивільнимо пам’ять.
#include<iostream.h>
void main()
{
int *c1 = new int;____________________________________________________________
*c1 = 5;_____________________________________________________________________
int *c2 = new int(7);__________________________________________________________
cout << *c1 << “\t” << *c2 << “\n”;______________________________________________
c1 = c2;_____________________________________________________________________
cout<< *c1 << “\t” << *c2 << “\n”;______________________________________________
delete(c2);__________________________________________________________________
cout << *c1 << “\n”;__________________________________________________________
}
Контрольні запитання
№
| Питання
| Відповідь
|
| Для чого призначена функція clrscr()?
|
|
2.
| Для чого використовують команду endl?
|
|
3.
| Яку бібліотеку необхідно під єднати, щоб працювала функція getch()?
|
|
4.
| Вказівник – це …
|
|
5.
| Як описуються вказівники?
|
|
6.
| Як дізнатися адресу даного у пам'яті?
|
|
7.
| Які змінні називають динамічними?
|
|
8.
| З допомогою якої команди вивільняють пам'ять?
|
|
9.
| Коли вказівник не вказуватиме на жодну ділянку памяті?
|
|