Неактивна зіркаНеактивна зіркаНеактивна зіркаНеактивна зіркаНеактивна зірка
 

Розділ 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(&а);     // еквівалентно попередньому оператору

(Для ознайомлення з повним текстом статті необхідно залогінитись)