ЛР5. Значення, посилання і вказівник
Коротко про роботу
Три короткі фрагменти показують різницю між копією, посиланням і вказівником. Варіант визначає STUDENT_X.
Відкрити робочий зошит Як виконувати лабораторні
1. Умова
Три короткі фрагменти показують різницю між копією, посиланням і вказівником.
Усі обчислення виконуйте з даними свого STUDENT_X. Значення варіанта друкує перша комірка зошита.
2. Що треба знати
Робота виконується після Л1–Л3. Потрібні поняття:
- копія значення
- посилання
& - адреса та вказівник
* nullptr
Межа матеріалу
Використовуйте поняття, вивчені до Л1–Л3. Динамічне виділення пам’яті через new або delete у цій роботі не використовується.
3. Варіант, вхідні дані та результат
У зошиті заповніть STUDENT_NAME, STUDENT_GROUP і STUDENT_X від 1 до 30.
Вхідні дані
| Поле | Зміст |
|---|---|
base |
початкове значення першого об’єкта |
other |
початкове значення другого об’єкта |
copy_delta |
зміна копії |
ref_delta |
зміна через посилання |
ptr_delta |
зміна через перше розіменування |
pointer_new_value |
значення після перепризначення вказівника |
Поля результату
| Поле | Зміст |
|---|---|
copy_x |
оригінал після зміни копії |
copy_y |
копія після зміни |
reference_x |
об’єкт після зміни через посилання |
pointer_a |
перший об’єкт після роботи через вказівник |
pointer_b |
другий об’єкт після перепризначення |
pointer_points_to_b |
чи вказує p наприкінці на b |
Назви полів результату не змінюйте.
4. Терміни і правила
Терміни
- копія — окремий об’єкт із власним значенням.
- посилання — друге ім’я вже наявного об’єкта.
- вказівник — об’єкт, який зберігає адресу іншого об’єкта.
- розіменування — доступ до об’єкта за адресою через
*p.
Правила
- У фрагменті «Копія» змінна
yє окремою копією значенняx. - У фрагменті «Посилання» ім’я
aliasпозначає той самий об’єкт, що йx_ref. - До
p = &bвказівникpзберігає адресуa. Після цієї інструкції він зберігає адресуb. pointer_points_to_bмає значенняtrue, якщо наприкінціpвказує наb.
Код для трьох експериментів
Кожний фрагмент запускайте окремо з даними свого варіанта. Перед запуском запишіть прогноз, який прямо вимагає відповідне завдання.
// Копія
int x{base};
int y{x};
y += copy_delta;
// Посилання
int x_ref{base};
int& alias{x_ref};
alias += ref_delta;
// Вказівник
int a{base};
int b{other};
int* p{&a};
*p += ptr_delta;
p = &b;
*p = pointer_new_value;
5. Завдання
Завдання 1
Спрогнозуйте значення x і y, виконайте фрагмент «Копія» та запишіть результат у copy_x і copy_y.
Завдання 2
Спрогнозуйте значення x_ref, виконайте фрагмент «Посилання» та запишіть результат у reference_x. Одним реченням поясніть роль alias.
Завдання 3
Спрогнозуйте значення a, b і ціль p. Запишіть pointer_a, pointer_b і pointer_points_to_b.
6. Перевірка і здача
- Запустіть самоперевірку та виправте помилки.
- Перезапустіть ядро і виконайте роботу ще раз від початку.
- Збережіть
.ipynbі PDF з кодом та результатами.
Назва PDF: LR05_Прізвище_Група_VNN.pdf.