Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЯП Лабораторная работа 4

.pdf
Скачиваний:
0
Добавлен:
17.06.2025
Размер:
869.12 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронновычислительных систем (КИБЭВС)

УКАЗАТЕЛИ И ССЫЛКИ Отчет по лабораторной работе №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