
ЯП Лабораторная работа 4
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронновычислительных систем (КИБЭВС)
УКАЗАТЕЛИ И ССЫЛКИ Отчет по лабораторной работе №4
по дисциплине «Языки программирования» Вариант №4
Студент гр. 7х3-х
_______ ххххххххх
_______
Приняла: Преподаватель каф. КИБЭВС
_______ ххххххх
_______
Томск 2025
Введение
Целью работы является изучение механизмов работы указателей и ссылок.
Постановка задачи:
1.Изучить краткие теоретические сведения;
2.Подготовить примеры использования указателей и ссылок для языка C++ и языка программирования, определенного выбранным вариантом.
Сравнить возможности языков. При этом продемонстрировать:
2.1.разницу между типизированными и нетипизированными указателями;
2.2.разницу между указателями на данные и на функции;
2.3.разницу между указателем и указуемым объектом;
2.4.разницу между указателями-константами и указателями на константу;
2.5.особенности работы с многоуровневыми указателями;
2.6.разницу между указателями и ссылками;
3.Написать отчет и защитить у преподавателя.
2

1 РАБОТА С УКАЗАТЕЛЯМИ И ССЫЛКАМИ НА С++
Для выполнения работы с указателями и ссылками была создана программа на языке C++, исходный код представлен в приложении А.
На рисунке 1.1 представлена разница между типизированными и нетипизированными указателями.
Рисунок 1.1 – Типизированные и нетипизированные указатели
На рисунке 1.2 представлена разница между указателями на данные и и на функции.
Рисунок 1.2 – Указатели на данные и на функции
На рисунке 1.3 представлена разница между указателем и указуемым объектом.
3

Рисунок 1.3 – Указатель и указуемый объект
На рисунке 1.4 представлена разница между указателями-константами и указателями на константу.
Рисунок 1.4 – Указатели-константы и указатели на константы
На рисунке 1.5 представлены особенности работы с многоуровневыми указателями.
Рисунок 1.5 – Многоуровневые указатели
4

На рисунке 1.6 представлена разница между указателями и ссылками.
Рисунок 1.6 – Указатели и ссылки
5

2 РАБОТА С ССЫЛКАМИ НА JAVA
Для выполнения работы был выбран язык программирования Java, исходный код программы представлен в приложении Б.
В Java не существует указателей, работа с адресами напрямую невозможна, но реализованы ссылки. На рисунке 2.1 представлен пример ссылки, они всегда являются типизированными.
Рисунок 2.1 – Типизированная ссылка
Ссылки работают только с объектами, при присваивании значения примитивного типа оно автоматически упаковывается в объект. Функциональность указателей на функции можно реализовать с помощью интерфейсов и лямбда-выражений (рисунок 2.2).
Рисунок 2.2 – Ссылка, работающая с объектом и лямбда-выражение
Так как адрес напрямую получить невозможно, при выводе переменной и ссылки будет одно и то же значение (рисунок 2.3).
Рисунок 2.3 – Переменная и ссылка
6

Ссылка может указывать на константную переменную, но вот реализовать «константный указатель» с помощью ссылок невозможно (рисунок
2.4).
Рисунок 2.4 – Ссылка на константу
Функциональность многоуровневых указателей можно реализовать с помощью массива ссылок (рисунок 2.5).
Рисунок 2.5 – Массив ссылок
Помимо обыкновенных (сильных) ссылок, в Java представлен пакет java.lang.ref, содержащий реализации мягких, слабых и фантомных ссылок, которые по-разному обрабатываются сборщиком мусора и предоставляют возможность более гибко работать с памятью.
7
3 СРАВНЕНИЕ ЯЗЫКОВ
В таблице 3.1 представлено сравнение реализации указателей и ссылок на языках C++ и Java.
Таблица 3.1 – Сравнение С++ и Java
|
C++ |
Java |
|
|
|
Типизация указателей |
Указатели могут быть |
Ссылки всегда |
(ссылок) |
типизированными и |
типизированы. |
|
нетипизированными. |
|
|
|
|
Указатели (ссылки) на |
Есть указатели на данные |
Ссылки работают только |
данные и на функции |
и указатели на функции. |
с объектами. |
|
Через указатель на |
Функциональность |
|
функцию можно |
указателей на функции |
|
вызывать исходную |
можно реализовать с |
|
функцию. |
помощью интерфейсов и |
|
|
лямбда-выражений. |
|
|
|
Указатель (ссылка) и |
При выводе указателя в |
Адрес напрямую |
указуемый объект |
строке будет получен |
получить невозможно, |
|
адрес, а не значение |
при выводе переменной и |
|
указуемого объекта. |
ссылки будет одно и то |
|
|
же значение. |
|
|
|
Указатель-константа и |
Через указатель на |
Ссылка может указывать |
указатель (ссылка) на |
константу нельзя |
на константную |
константу |
изменить значение |
переменную, но вот |
|
исходного объекта. Через |
реализовать |
|
константный указатель |
«константный указатель» |
|
можно изменить |
с помощью ссылок |
|
значение исходного |
невозможно. |
|
объекта, но нельзя |
|
|
|
|
8
|
изменить сам указатель. |
|
|
|
|
Многоуровневые |
Число символов * при |
Функциональность |
указатели (ссылки) |
объявлении указателя |
многоуровневых |
|
показывает порядок |
указателей можно |
|
указателя. Чтобы |
реализовать с помощью |
|
получить доступ к |
массива ссылок. |
|
значению, на которое |
|
|
ссылается указатель, его |
|
|
необходимо |
|
|
разыменовывать |
|
|
соответствующее |
|
|
количество раз. |
|
|
|
|
Разница между |
Указатель – это |
Существуют сильные, |
указателями и ссылками |
переменная, значением |
мягкие, слабые и |
|
которой является адрес |
фантомные ссылки. |
|
другой переменной. |
Указателей нет. |
|
Ссылка – переменная, |
|
|
являющаяся скрытой |
|
|
формой указателя, при |
|
|
использовании |
|
|
автоматически |
|
|
разыменовывается. |
|
|
|
|
9
Заключение
В ходе выполнения данной работы были изучены механизмы работы указателей и ссылок.
10