Вказівники являють собою змінну цілого типу, що інтерпретується як адреса байту пам’яті, яка містить певний елемент даних. Цим елементом може бути змінна, константа, адреса іншої змінної т.ін.
Звичайно, працюючи з деякою змінною, розробник не цікавиться розміщенням в пам’яті змінних і констант. До них можна просто звернутися за іменем, при цьому Pascal точно знає, де шукати ці змінні і константи. Припустімо, наша програма містить в розділі оголошень такий рядок:
VAR Number:integer;
Цим рядком ми вказуємо компілятору на необхідність зарезервувати область в пам’яті, на яку ми будемо посилатися по імені Number.
Адресу, за якою розміщена змінна Number, в пам’яті можна визначити за допомогою оператора @
P1:=@Number;
чи за допомогою функції Addr.
В результаті виконання операції P1:=@Number; в змінну P1 буде записана адреса змінної Number.
Часто в процесі написання програми виникають ситуації, коли без застосування вказівників неможливо обійтися. Так трапляється, якщо:
1. Програма працює з великим об’ємом даних (більше 64 Кб)
2. Програма під час пам’яті використовує дані, об’єм пам’яті для збереження яких зарані невідомий (так часто трапляється при роботі з масивами)
3. В програмі використовується буфер пам’яті для тимчасового зберігання даних.
4. Ми використовуємо структуровані змінні, тобто записи, масиви чи множини, які мають різну структуру.
5. Програма використовує динамічні структури даних (стеки, однозв’язні і двозв’язні списки, черги, бінарні дерева).
Вказівники у Pascal-i можуть зв’язуватися з певним типом даних (типізовані вказівники) чи не зв’язуватися (нетипізовані вказівники). Ще для називання змінних цього типу використовуються терміни: посилання і reference.
Типізовані вказівники
Для оголошення типізованого вказівника звичайно використовується символ ^, який розміщується безпосередньо перед відповідним типом даних, наприклад:
TYPE
P1Ptr=^INTEGER;
VAR
P1:^INTEGER;
В загальному випадку:
TYPE
ІмяВказівника=^ІмяБазисногоТипу
де ІмяБазисногоТипу – будь-який ідентифікатор типу. В результаті такого визначення створені потім вказівники будуть вказувати на об’єкти базового типу, визначаючи тим самим динамічні змінні базового типу. Зараз нас особливо цікавлять вказівники на об’єкти. Синтаксис такого вказівника наступний:
TYPE
ObjType=OBJECT
…
END;
ObjPtr=^ObjType