Файл: Реферат по дисциплине Программирование и алгоритмизация.docx

ВУЗ: Не указан

Категория: Реферат

Дисциплина: Не указана

Добавлен: 28.04.2024

Просмотров: 25

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

«ТЮМЕНСКИЙ ИНДУСТРИАЛЬНЫЙ университет»

КАФЕДРА КИБЕРНЕТИЧЕСКИХ СИСТЕМ
Реферат

по дисциплине «Программирование и алгоритмизация»

Тема: «Указатели»
Вариант 5


Выполнила:

студентка группы АТПбз-19-2

Худобердина Альбина
Проверил:

доцент Сенкевич Л.Б.
Тюмень 2021

Оглавление


Введение 3

Определение указателя 4

Операторы * и & 5

Арифметические операции 6

Преимущества и недостатки 7

Размер указателей 8

Польза указателей 9

Заключение 10

Список литературы 11


Введение


В информатике указатель является объектом во многих языках программирования, который хранит адрес памяти. Это может быть другое значение, расположенное в памяти компьютера, или, в некоторых случаях, аппаратное обеспечение компьютера с отображением памяти. Указатель ссылается на место в памяти, и получение значения, хранящегося в этом месте, называется разыменованием указателя. По аналогии номер страницы в указателе книги можно рассматривать как указатель на соответствующую страницу; разыменование такого указателя будет осуществляться путем перехода на страницу с заданным номером и чтения текста, найденного на этой странице. Фактический формат и содержимое переменной-указателя зависят от базовой компьютерной архитектуры. Использование указателей значительно повышает производительность повторяющихся операций, таких как обход повторяемых структур данных (например, строк, таблиц поиска, управляющих таблиц и древовидных структур). В частности, копирование и разыменование указателей часто обходится гораздо дешевле по времени и пространству, чем копирование и доступ к данным, на которые указывают указатели. Указатели также используются для хранения адресов точек входа для вызываемых подпрограмм в процедурном программировании и для связывания во время выполнения с библиотеками динамической компоновки (DLL). В объектно-ориентированном программировании, указатели на функцию используются для связывания методов, часто с использованием таблицы виртуальных методов.

Определение указателя


Указатель – это переменная, которая содержит адрес другой переменной в памяти. Например, если переменная a содержит адрес переменной b, то это означает, что переменная указывает на переменную b.

Язык C++ поддерживает два способа доступа к переменной: ссылка на переменную по ее имени и использование механизма указателей.

Одним из преимуществ языка C++ в сравнении с другими языками программирования есть использование указателей для доступа к переменной. Также, как известно, доступ к переменной можно получить по ее имени.

С помощью указателей можно удобно организовывать, например, связанные списки, динамическое выделение памяти и т.д.

Операторы * и &


Операция & называется операцией взятия адреса. Ее можно применять только к таким выражениям, которые могут стоять в левой части оператора присваивания, например, именам переменных или элементам массивов. Ее результатом будет указатель соответствующего типа, выбирающий (или указывающий на) ту переменную, к которой применяется эта операция.

cout << &a;
На экран будет выведен адрес переменной a.

Указатель можно создать следующим образом:

int a = 0;
int* ptr;

ptr = &a;

cout << ptr;
Вторая операция, *, называется операцией разыменования. Она может применяться только к указателям и дает ту переменную, на которую этот указатель указывает. Результат этой операции может встречаться как в левой части оператора присваивания, что означает присваивание выбранной указателем переменной, так и в правой, что означает использование значения указываемой переменной.

Арифметические операции


Арифметические операции с указателями (сложение с константой, вычитание, инкремент и декремент) автоматически учитывают размер типа величин, адресуемых указателями. Эти операции применимы только к указателям одного типа и имеют смысл в основном при работе со структурами данных, последовательно размещенными в памяти, например с массивами.

Инкремент++ перемещает указатель к следующему элементу массива, декремент – к предыдущему. Если указатель на определенный тип увеличивается или уменьшается на константу
, то его значение изменяется на величину этой константы, умноженной на размер объекта данного типа. Эта операция производится автоматически.

Разность двух указателей – это расстояние между двумя областями памяти, определяемое в единицах, кратных размеру (в байтах) объекта того типа, к которому отнесены эти указатели. Таким образом, разность указателей, адресующих два смежных объекта одинакового типа, по абсолютной величине всегда равна единице.


Преимущества и недостатки


Преимущество указателей

Преимущество указателей в том, что они позволяют передать в функцию значение по ссылке. Слово «ссылка» означает, что мы не передаем значение, а ссылаемся на адрес этого значения. В этом случае можно внутри функции изменять значение элемента данных. Хотя указатель и будет уничтожен после выхода из функции, но мы изменили значение памяти по указателю и это изменение значения сохранится после выход из функции.

Недостатки указателей

  1. Нарушение принципов изоляции кода

Ошибка в указателе может привести к тому, чтобы будет испорчена память в случайном месте. Хорошо еще, если повезет и программа рухнет, тогда программист сразу заметит ошибку. Но если программа продолжит работу, то найти ошибку будет очень сложно, ведь она не сразу проявляется.

  1. Отвлечение внимание на детали реализации

При использовании указателей программисту нужно держать в уме принципы работы с памятью, а это отвлекает от сути задачи, которая решает программист. При правильном подходе к программированию программист должен думать только решаемой задаче, и не отвлекаться на посторонние детали.

Размер указателей


Размер указателя зависит от архитектуры, на которой скомпилирован исполняемый файл: 32-битный исполняемый файл использует 32-битные адреса памяти. Следовательно, указатель на 32-битном устройстве занимает 32 бита (4 байта). С 64-битным исполняемым файлом указатель будет занимать 64 бита (8 байт). И это вне зависимости от того, на что указывает указатель.

Размер указателя всегда один и тот же. Это связано с тем, что указатель — это всего лишь адрес памяти, а количество бит, необходимое для доступа к адресу памяти на определенном устройстве, — всегда постоянное.

Польза указателей



Указатели полезны в следующих случаях:

  • Массивы реализованы с помощью указателей. Указатели могут использоваться для итерации по массиву.

  • Они являются единственным способом динамического выделения памяти в C++. Это, безусловно, самый распространенный вариант использования указателей.

  • Они могут использоваться для передачи большого количества данных в функцию без копирования этих данных.

  • Они могут использоваться для передачи одной функции в качестве параметра другой функции.

  • Они используются для достижения полиморфизма при работе с наследованием.

  • Они могут использоваться для представления одной структуры/класса в другой структуре/классе, формируя, таким образом, целые цепочки.


Заключение


Указатели - это чрезвычайно мощный инструмент в программировании. С помощью указателей некоторые вещи в программировании можно сделать намного проще и при этом эффективность работы вашей программы значительно повысится. Указатели даже позволяют обрабатывать неограниченное количество данных. Например, с помощью указателей можно изменять значения переменных внутри функции, при этом переменные передаются в функцию в качестве параметров. Так же, указатели можно использовать для динамического выделения памяти, что означает, что вы можете писать программы, которые могут обрабатывать практически неограниченные объемы данных на лету — не нужно знать, когда вы пишете программу, сколько памяти нужно выделить заранее. Пожалуй, это самая мощная функция указателей.

Список литературы


https://wikichi.ru/wiki/Pointer_(computer_programming)#References

https://intuit.ru/studies/courses/626/482/lecture/10935?page=3

https://ucheb2015.ucoz.net/index/ukazateli_i_ssylki_v_s/0-46

https://www.sites.google.com/site/sistprogr/lekcii2/lek1_10

https://about-prog.com/ru/cpp/ukazateli