Урок №91. Вказівники і const

  Юрій  | 

  Оновл. 13 Січ 2021  | 

 95

На цьому уроці ми розглянемо вказівники на константні змінні, вказівники на константні значення, константні вказівники і константні вказівники на константні значення в мові C++.

Вказівники на константні змінні

До цього моменту всі вказівники, які ми розглядали, були неконстантними вказівниками на неконстантні значення:

Однак, що станеться, якщо вказівник буде вказувати на константну змінну?

Вищенаведений фрагмент коду не скомпілюється: ми не можемо присвоїти неконстантному вказівнику константну змінну. В цьому є сенс, адже на те вона і константа, що її значення не можна змінити. Гіпотетично, якби ми могли присвоїти константне значення неконстантному вказівнику, то тоді ми могли б розіменувати неконстантний вказівник і змінити значення цієї ж константи. А це вже є порушенням самого поняття «константа».

Вказівники на константні значення

Вказівник на константне значення — це неконстантний вказівник, який вказує на константу. Для оголошення вказівника на константне значення, використовується ключове слово const перед типом даних:

У прикладі, наведеному вище, ptr вказує на константний цілочисельний тип даних.

Поки що все добре. Розглянемо наступний приклад:

Вказівник на константну змінну може вказувати і на неконстантну змінну (як у випадку зі змінною value у вищенаведеному прикладі). Подумайте про це так: вказівник на константну змінну оброблює змінну як константу при отриманні доступу до неї незалежно від того, чи була ця змінна від самого початку визначена як const чи ні. Таким чином, наступне в порядку речей:

Але не наступне:

Вказівнику на константне значення, який при цьому сам не є константним (він просто вказує на константне значення), можна присвоїти і інше значення:

Константні вказівники

Ми також можемо зробити вказівник константним. Константний вказівник — це вказівник, значення якого не може бути змінено після ініціалізації. Для оголошення константного вказівника використовується ключове слово const між зірочкою і ім’ям вказівника:

Подібно звичайним константним змінним, константний вказівник повинен бути ініціалізований при оголошенні. Це означає, що він завжди буде вказувати на одну і ту же адресу. У вищенаведеному прикладі ptr завжди буде вказувати на адресу value (до тих пір, поки вказівник не вийде з області видимості і не знищиться):

Однак, оскільки змінна value, на яку вказує вказівник, не є константою, то її значення можна змінити шляхом розіменування константного вказівника:

Константні вказівники на константні значення

Нарешті, можна оголосити константний вказівник на константне значення, використовуючи ключове слово const як перед типом даних, так і перед ім’ям вказівника:

Константний вказівник на константне значення не можна перенаправити вказувати на інше значення так же, як і значення, на яке він вказує, — не можна змінити.

Висновки

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

   Неконстантний вказівник можна перенаправити вказувати на будь-яку іншу адресу.

   За допомогою вказівника на неконстантне значення можна змінити це ж значення (на яке він вказує).

   Константний вказівник завжди вказує на одну і ту ж адресу, і ця адреса не може бути змінена.

   Вказівник на константне значення обробляє значення як константне (навіть якщо воно таким не є) і, відповідно, це значення через вказівник змінити не можна.

А ось з синтаксисом може бути трохи важче. Просто пам’ятайте, що тип значення, на який вказує вказівник, завжди знаходиться зліва (на самому початку):

Вказівники на константні значення в основному використовуються в параметрах функцій (наприклад, при передачі масиву) для гарантії того, що функція випадково не змінить значення переданого їй аргументу.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (1 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *