Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab 12.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
27 Кб
Скачать
☆

2.2. Породження динамічних об’єктів

При описі змінної вказівникового типу вона не вказує на жодний

програмний об’єкт, лише вводить у використання статичну змінну (наприклад:

P, Q, AM, BM) вказівникового типу. Тобто по цьому опису транслятором лише

виділяється місце у пам’яті машини, необхідне для розміщення вказівника.

Для породження самого динамічного об’єкта є стандартна процедура

NEW (“новий”).

У операторі виклику процедури задається один фактичний параметр –

вказівникова змінна породжуваного об’єкта. Наприклад:

NEW(P); NEW(Q);

У результаті виконання цієї процедури породжується новий об’єкт такого

типу, який вказаний при описі вказівникової змінної. Для змінної Р –

динамічний об’єкт цілого типу; для змінної Q – динамічний об’єкт, елементами

якого є символ.

Змінним P та Q присвоюється вказівник на ці породжені об’єкти. Тобто у

пам’яті машини резервується місце для породженого об’єкта, а адреса початку

цього місця присвоюється змінним P та Q.

2.3. Змінна із вказівником

При породженні динамічного об’єкта, йому не присвоюється ще ніякого

значення.

Для того, щоб динамічній змінній присвоїти якесь значення або вико-

ристати це значення, вводиться __________поняття “змінна з вказівником”. У

найпростішому випадку – це ім’я змінної вказівникового типу після якого

стоїть стрілка, тобто:

Р↑ – це значення того програмного об’єкта, на який вказує вказівникова

змінна Р.

Після породження динамічних змінних P та Q можна присвоїти їм

початкові значення:

Змінна з вказівником може використовуватися у будь-яких конструкціях

мови. Але тут треба звертати увагу на тип вказівникової змінної.

Не можна записати:

P := P↑+Q↑;

Оскільки змінна Р – цілого типу, а Q – символьного, крім того Р↑ – це

значення об’єкта, а Р – вказівник на нього, тобто адреса.

Але якщо опишемо у нашій програмі змінну S цілого типу, то такі оператори

будуть правильними:

S := S + P↑; P↑:= P↑ DIV 5; AM[P↑+1] := 100;

Змінна вказівникового типу може мати й складнішу форму, наприклад:

TYPE

PS = ↑REAL;

VAR

A : ARRAY [1..20] OF PS;

У цьому випадку маємо послідовність з 20-ти значень вказівникового

типу, до того ж кожна з них вказує на дійсні значення. При такому описі у

програмі будуть фігурувати вказівникові змінні з індексами. Наприклад, А[i],

A[i+2] та відповідні їм змінні з вказівниками:

A[i]↑ та A[i+2]↑

Значення цих змінних будуть дійсного типу: A[2]↑ := 5.44;

2.4. Операції над змінними вказівникового типу

Основне правило: над значеннями вказівникового типу не можна

виконувати ніяких операцій, які давали б результат цього самого типу.

Значення вказівникового типу – це адреса тих чи інших програмних об’єктів і

115

змінювати її на свій розсуд не можна, оскільки розміщенням усіх об’єктів у

пам’яті машини займається транслятор.

До значень вказівникового типу можуть застосовуватись деякі опе-

рації порівняння, а також вони можуть бути операндами в операторі

присвоювання.

У загальному оператор присвоювання має вигляд:

V := E;

де Е – змінна або вираз вказівникового такого самого типу, як і тип змінної V.

У правій частині оператора присвоювання може бути:

1. Пустий вказівник NIL.

2. Вказівникова змінна.

3. Вказівникова функція (тобто функція, результатом якої є вказівник).

Вираз Е повинен мати обов’язково той самий тип, що і змінна V.

Не можна записати:

P := Q;

Оскільки змінна Р може вказувати лише на цілі значення, а змінна Q на

значення типу CHAR.

Для ілюстрації виконання операторів присвоювання опишемо дві вказів-

никові змінні:

VAR P, D : ↑INTEGER;

Після виконання оператора P := D (рис. 1, в) на динамічний об’єкт із

значенням 5 не вказує жодний вказівник – він став недоступним для програми,

хоч місце у пам’яті займає.

З іншого боку, виконання цього оператора не призвело до породження

нового динамічного об’єкта. Просто змінна Р буде вказувати на той самий

об’єкт, що і змінна D. Таким чином на об’єкт із значенням 25 будуть вказувати

два вказівники Р та D.

Після виконання оператора D := NIL (рис. 1, г) розривається зв’язок D з

об’єктом 25 і на нього буде вказувати лише змінна Р.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]