Файл: Реферат по дисциплине Программирование и алгоритмизация.docx
Добавлен: 28.04.2024
Просмотров: 31
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«ТЮМЕНСКИЙ ИНДУСТРИАЛЬНЫЙ университет»
КАФЕДРА КИБЕРНЕТИЧЕСКИХ СИСТЕМ
Реферат
по дисциплине «Программирование и алгоритмизация»
Тема: «Указатели»
Вариант 5
Выполнила:
студентка группы АТПбз-19-2
Худобердина Альбина
Проверил:
доцент Сенкевич Л.Б.
Тюмень 2021
Оглавление
Введение 3
Определение указателя 4
Операторы * и & 5
Арифметические операции 6
Преимущества и недостатки 7
Размер указателей 8
Польза указателей 9
Заключение 10
Список литературы 11
Введение
В информатике указатель является объектом во многих языках программирования, который хранит адрес памяти. Это может быть другое значение, расположенное в памяти компьютера, или, в некоторых случаях, аппаратное обеспечение компьютера с отображением памяти. Указатель ссылается на место в памяти, и получение значения, хранящегося в этом месте, называется разыменованием указателя. По аналогии номер страницы в указателе книги можно рассматривать как указатель на соответствующую страницу; разыменование такого указателя будет осуществляться путем перехода на страницу с заданным номером и чтения текста, найденного на этой странице. Фактический формат и содержимое переменной-указателя зависят от базовой компьютерной архитектуры. Использование указателей значительно повышает производительность повторяющихся операций, таких как обход повторяемых структур данных (например, строк, таблиц поиска, управляющих таблиц и древовидных структур). В частности, копирование и разыменование указателей часто обходится гораздо дешевле по времени и пространству, чем копирование и доступ к данным, на которые указывают указатели. Указатели также используются для хранения адресов точек входа для вызываемых подпрограмм в процедурном программировании и для связывания во время выполнения с библиотеками динамической компоновки (DLL). В объектно-ориентированном программировании, указатели на функцию используются для связывания методов, часто с использованием таблицы виртуальных методов.
Определение указателя
Указатель – это переменная, которая содержит адрес другой переменной в памяти. Например, если переменная a содержит адрес переменной b, то это означает, что переменная a указывает на переменную b.
Язык C++ поддерживает два способа доступа к переменной: ссылка на переменную по ее имени и использование механизма указателей.
Одним из преимуществ языка C++ в сравнении с другими языками программирования есть использование указателей для доступа к переменной. Также, как известно, доступ к переменной можно получить по ее имени.
С помощью указателей можно удобно организовывать, например, связанные списки, динамическое выделение памяти и т.д.
Операторы * и &
Операция & называется операцией взятия адреса. Ее можно применять только к таким выражениям, которые могут стоять в левой части оператора присваивания, например, именам переменных или элементам массивов. Ее результатом будет указатель соответствующего типа, выбирающий (или указывающий на) ту переменную, к которой применяется эта операция.
cout << &a;
На экран будет выведен адрес переменной a.
Указатель можно создать следующим образом:
int a = 0;
int* ptr;
ptr = &a;
cout << ptr;
Вторая операция, *, называется операцией разыменования. Она может применяться только к указателям и дает ту переменную, на которую этот указатель указывает. Результат этой операции может встречаться как в левой части оператора присваивания, что означает присваивание выбранной указателем переменной, так и в правой, что означает использование значения указываемой переменной.
Арифметические операции
Арифметические операции с указателями (сложение с константой, вычитание, инкремент и декремент) автоматически учитывают размер типа величин, адресуемых указателями. Эти операции применимы только к указателям одного типа и имеют смысл в основном при работе со структурами данных, последовательно размещенными в памяти, например с массивами.
Инкремент++ перемещает указатель к следующему элементу массива, декремент – к предыдущему. Если указатель на определенный тип увеличивается или уменьшается на константу
, то его значение изменяется на величину этой константы, умноженной на размер объекта данного типа. Эта операция производится автоматически.
Разность двух указателей – это расстояние между двумя областями памяти, определяемое в единицах, кратных размеру (в байтах) объекта того типа, к которому отнесены эти указатели. Таким образом, разность указателей, адресующих два смежных объекта одинакового типа, по абсолютной величине всегда равна единице.
Преимущества и недостатки
Преимущество указателей
Преимущество указателей в том, что они позволяют передать в функцию значение по ссылке. Слово «ссылка» означает, что мы не передаем значение, а ссылаемся на адрес этого значения. В этом случае можно внутри функции изменять значение элемента данных. Хотя указатель и будет уничтожен после выхода из функции, но мы изменили значение памяти по указателю и это изменение значения сохранится после выход из функции.
Недостатки указателей
-
Нарушение принципов изоляции кода
Ошибка в указателе может привести к тому, чтобы будет испорчена память в случайном месте. Хорошо еще, если повезет и программа рухнет, тогда программист сразу заметит ошибку. Но если программа продолжит работу, то найти ошибку будет очень сложно, ведь она не сразу проявляется.
-
Отвлечение внимание на детали реализации
При использовании указателей программисту нужно держать в уме принципы работы с памятью, а это отвлекает от сути задачи, которая решает программист. При правильном подходе к программированию программист должен думать только решаемой задаче, и не отвлекаться на посторонние детали.
Размер указателей
Размер указателя зависит от архитектуры, на которой скомпилирован исполняемый файл: 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