Розділ 7. Вказівники та посилання
7.1. Основні поняття
Для підвищення ефективності програм в мовах C/C++ широко використовуються вказівники та посилання. Вказівники дають змогу працювати з адресами комірок оперативної пам’яті, реалізовуючи непрямий доступ до їхнього вмісту. Посилання є альтернативним ім’ям (синонімом) змінної і для нього не резервується місце в оперативній пам’яті. Вказівники застосовують для доступу до елементів структурованих типів, роботи з динамічними змінними під час виконання програми, утворення спискових структур (стек, черга, дерево) тощо. Застосування вказівників і посилань як параметрів функцій дає змогу функціям змінювати значення своїх аргументів [4].
Посилання оголошується так:
<тип_даних> & <ім’я_посилання> = < ім’я_змінної>;
де тип_даних – це тип змінної, на яку вказує посилання, & – це оператор посилання, який означає, що наступне після нього ім’я є ім’ям змінної типу посилання.
Посилання слід ініціалізовувати ім’ям змінної під час оголошення або виклику функції, в яку передаються посилання як аргументи. Використання посилання після його ініціалізації дає той самий результат, що й безпосереднє використання змінної. Типи посилання та змінної, значенням якої ініціалізовується посилання, мають співпадати, інакше створюється анонімний об’єкт для змінної, що не була оголошена.
Після ініціалізації посилання завжди посилається на певний об’єкт. Під час виконання програми не можна змінити посилання з одного об’єкта на інший.
Приклад 7.1.
int var = 10;
cout << "var = " << var << endl; // результат: var = 10
int &p = var; // Посилання на змінну
cout << "&p = " << &p << endl; // результат: &p = 00D9F7C8
cout << "p = " << p << endl; // результат: p = 10
p = 88;
cout << "p = " << p << endl; // результат: p = 88
cout << "var = " << var << endl; // результат: var = 88
const double &e = 2.72; // Посилання на константу
Робота з вказівниками позбавляє від необхідності переміщення об’єктів у пам’яті, яке займає багато часу, якщо об’єкти є великими. При використанні вказівників змінюються вказівники на адреси, а не на дані.
Вказівник на змінну – це місце розташування змінної в пам’яті комп’ютера, тобто її адреса.
Синтаксис оголошення вказівника такий:
<тип даних> *<ім’я_вказівника>;
де тип даних – простий або структурований тип адресованої змінної; символ * (зірочка) означає “вказати на”.
У мові С визначено такі операції для роботи з посиланнями та вказівниками:
- 1) отримання адреси змінної (&, адресація) застосовується до об’єктів, які мають власне ім’я та розміщені в оперативній пам’яті;
- 2) розіменування вказівника (*, розадресація) використовується для доступу до змінної, адреса якої зберігається у вказівнику. Цю операцію можна використовувати як для отримання, так і для зміни значення змінної, яка не є константою. Зауважимо, що символ * в оголошенні вказівника та в операції розадресації – це зовсім різні речі, які лише позначаються однаковим символом.
Існує кілька способів ініціалізації вказівника:
- 1) присвоєння вказівнику адреси існуючого об’єкта:
- за допомогою операції отримання адреси &:
int а = 5;
int *р = &а; // у вказівник «p» записується адреса змінної «а»
int *p(&а); // еквівалентно попередньому оператору
(Для ознайомлення з повним текстом статті необхідно залогінитись)