Перейти до змісту

ЛР5. Значення, посилання і вказівник

Коротко про роботу

Три короткі фрагменти показують різницю між копією, посиланням і вказівником. Варіант визначає STUDENT_X.

Відкрити робочий зошит Як виконувати лабораторні

1. Умова

Три короткі фрагменти показують різницю між копією, посиланням і вказівником.

Усі обчислення виконуйте з даними свого STUDENT_X. Значення варіанта друкує перша комірка зошита.

2. Що треба знати

Робота виконується після Л1–Л3. Потрібні поняття:

  1. копія значення
  2. посилання &
  3. адреса та вказівник *
  4. 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.

Правила

  1. У фрагменті «Копія» змінна y є окремою копією значення x.
  2. У фрагменті «Посилання» ім’я alias позначає той самий об’єкт, що й x_ref.
  3. До p = &b вказівник p зберігає адресу a. Після цієї інструкції він зберігає адресу b.
  4. 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. Перевірка і здача

  1. Запустіть самоперевірку та виправте помилки.
  2. Перезапустіть ядро і виконайте роботу ще раз від початку.
  3. Збережіть .ipynb і PDF з кодом та результатами.

Назва PDF: LR05_Прізвище_Група_VNN.pdf.