Рейтинг користувача: 5 / 5

Активна зіркаАктивна зіркаАктивна зіркаАктивна зіркаАктивна зірка
 

ВКАЗІВНИКИ ТА ПОСИЛАННЯ

МЕТОДИЧНІ ВКАЗІВКИ

до лабораторної роботи № 6

з дисципліни ”Алгоритмізація та програмування”

для студентів спеціальності 122 ”Комп’ютерні науки”

 

Затверджено

на засіданні кафедри інформаційних систем та мереж

Протокол №__ від _____.2018 р.

Львів-2018

 

Вказівники та посилання: Методичні вказівки до лабораторної роботи № 6 / Укл.: В.А. Висоцька. – Львів: Видавництво Національного університету ”Львівська політехніка”, 2018. – 12 с.

Укладачі                     Висоцька В.А., к.т.н., доцент

                         

 

Відповідальний за випуск Литвин В.В., д.т.н., професор

Рецензенти     Верес О.М., к.т.н., доцент

                          Берко А.Ю., д.т.н., професор

                          Ришковець Ю.В., к.т.н., старший викладач

 

Мета роботи: ознайомитись із поняттями вказівників та посилань на мовi Сі.

1.       Теоретичні відомості

1.1.          Основні поняття

Для підвищення ефективності програм в мовах C/C++ широко використовуються вказівники та посилання. Вказівники дають змогу працювати з адресами комірок оперативної пам’яті, реалізовуючи непрямий доступ до їхнього вмісту. Посилання є альтернативним ім’ям (синонімом) змінної і для нього місце в оперативній пам’яті не резервується. Вказівники використовують для доступу до елементів структурованих типів, роботи з динамічними змінними під час виконан­ня програми, утворення спискових структур (стек, черга, дерево) тощо. Застосування вказівників і посилань як параметрів функцій дає змогу функціям змінювати значення своїх аргументів.

Посилання оголошується так:

<тип_даних> & <ім’я_посилання> = <ім’я_змінної>;

де тип_даних – це тип змінної, на яку вказує посилання, & – це оператор посилання, який означає, що наступне після нього ім’я є ім’ям змінної типу посилання.

Посилання слід ініціалізовувати ім’ям змінної під час виклику функції, в яку воно передається як аргументи. Використання посилання після його ініціалізації дає той же результат, що й безпосереднє використання змінної. Типи посилання та змінної, значенням якої ініціалізовується посилання, мають співпадати, інакше створиться анонімний об’єкт для змінної, що не була оголошена. Після ініціалізації посилання за­вжди посилається на певний об’єкт. Під час виконання програми не можна змінити посилання з одного об’єкта на інший.

Приклад 6.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;

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

Вказівник на зміннуце місце розташування змінної в пам’яті комп’ютера, тобто її адреса.

Синтаксис оголошення вказівника такий:

<тип_даних> *<ім’я_вказівника> = [<значення>];

де тип_даних – простий або структурований тип адресованої змінної; символ * (зірочка) означає “вказати на”.

У мові С визначено такі операції для роботи з посиланнями та вказівниками:

  • отримання адреси змінної (&, адресація) застосовується до об’єктів, які мають власне ім’я та розміщені в оперативній пам’яті;
  • розіменування вказівника (*, розадресація) використовується для доступу до змінної, адреса якої зберігається у вказівнику. Цю операцію можна використовувати як для отримання, так і для зміни значення змінної, яка не є константою. Зауважимо, що символ “*” в оголошенні вказівника та в операції розадресації – це зовсім різні речі, які лише позначаються однаковим символом.

Існує кілька способів ініціалізації вказівника:

  • присвоєння вказівнику адреси існуючого об’єкта:
  • за допомогою операції отримання адреси &:

int а = 10;

int *р = &а;   // у вказівник «p» записується адреса змінної «а»

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