Перейти до основного вмісту
Модуль 5 · Урок 2 із 212/18 у курсі~15 min
Модульні уроки (2/2)

Покажчики

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


1. Що таке пам'ять і адреса?

Кожна змінна, яку ви оголошуєте у своїй програмі, зберігається в комірці оперативної пам'яті. Кожна клітинка має унікальну адресу пам’яті (зазвичай виражається в шістнадцятковому форматі, наприклад, 0x7ffee3bf87ac).

C++ дозволяє нам отримати адресу пам’яті будь-якої змінної за допомогою оператора адреси &:

C++
int x = 42;
std::cout << &x; // Prints the memory address of x (e.g., 0x7ffee3bf87ac)

2. Визначення вказівника

Покажчик — це спеціальна змінна, яка зберігає адресу пам’яті іншої змінної як її значення.

Синтаксис вимагає використання зірочки * після типу даних:

C++
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x

3. Оператор розіменування (*)

Щоб отримати доступ або змінити значення, що зберігається за адресою, на яку вказує вказівник, ми використовуємо оператор розіменування (або оператор ненаправлення), також представлений символом *:

C++
int x = 42;
int* ptr = &x;

std::cout << *ptr; // Prints 42 (the value ptr points to)

*ptr = 100; // Modifies the value of x through the pointer
std::cout << x;    // Now prints 100!

4. Нульові покажчики: nullptr

Покажчик, який не вказує на жодну дійсну адресу, має бути ініціалізований ключовим словом nullptr (введеним у C++11):

C++
int* ptr = nullptr; // Safe null pointer

Спробуйте самі

вправи#cpp.m5.l2.e1
Спроби: 0Завантаження…

У main є значення цілочисельної змінної, ініціалізоване значенням 42. Оголошіть вказівник на integer ptr, який вказує на адресу значення. Використовуйте розіменування ptr, щоб встановити значення value рівним 100, і, нарешті, надрукуйте значення за допомогою std::cout.

Завантаження редактора…
Показати підказку

Оголошіть вказівник за допомогою `int* ptr = &value;`, змініть значення, розіменувавши `*ptr = 100;`, і виведіть `std::cout << value;`.

Рішення доступне після 3 спроб

вправи#cpp.m5.l2.e2
Спроби: 0Завантаження…

Визначте функцію doubleValue, яка приймає вказівник на ціле число (int* ptr) і множить значення, на яке воно вказує, на 2 (якщо вказівник не є нульовим). У main викличте doubleValue, передаючи адресу змінної num і виведіть її.

Завантаження редактора…
Показати підказку

Функція має приймати `int* ptr`. Всередині використовуйте `*ptr = (_ptr) _ 2`. У основному викликайте це за допомогою `doubleValue(&num);`.

Рішення доступне після 3 спроб

Quiz#cpp.m5.l2.q1
Готовий

З урахуванням наданого коду, який вираз дозволяє безпосередньо змінити значення a, встановивши для нього значення 10?

C++
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?
Варіанти відповідей