Лабораторный практикум по основам языка С++Специальность: Проектирование авиационных двигателей
|
Тема 3.1.Указатели
3.1.1.Указатели
Указатель это переменная, хранящая адрес некой области памяти. Часто говорят, что указатель указывает на область памяти, или указатель ссылается на область памяти.
В области памяти, на которую ссылается указатель может располагаться некая переменная, массив данных или просто какие-либо бинарные данные, например изображение. Поскольку нет никакого стандартного типа данных, позволяющего хранить в переменной этого типа графическое изображение, звук или видео, то подобную информацию можно загрузить в память и хранить объем занятой памяти, а также адрес первой ячейки памяти всей области. Вот для этого и используются указатели, поскольку они позволяют хранить адрес в памяти.
Если указатель ссылается на область памяти, в которой хранится переменная стандартного типа
(int
, float
, char
и т.д.), то такой указатель называется типизированным.
Типизированный указатель описывается также, как и обычные переменные, но перед именем переменной-указателя ставится
значок "звездочка" (*
)
Результат выполнения программы:
Как видно из примера, приведенного выше, простое использование переменной-указателя позволяет получить
только адрес в памяти. Если необходимо извлечь значение из области памяти по адресу, хранящемуся в
переменной-указателе, то необходимо использовать операцию разыменования "звездочка" (*
).
Обратите внимание на строки 15, 18, 21 и 23. В этих строках перед именем переменной указателя
стоит звездочка, то есть указатель разыменовывается и потому выводится значение, а не адрес.
3.1.2. Ссылки и псевдонимы
Ссылка представляет собой скрытый указатель, который автоматически разименовывается при обращении к нему. То есть ссылочная переменная ссылается на некоторую переменную. Ее значение всегда равно значению переменной, на которую она ссылается. То есть это как бы еще одно имя (псевдоним) для одного и того же участка пямяти (переменной).
Описывается ссылочная переменная
также, как и обычная, только перед ее именем ставится знак &
. Кроме того,
переменная-ссылка при описании должна быть инициализирована, то есть ей обязательно
следует присвоить какое-то значение:
int ussualVar, &linkVar = ussualVar;
float ussualVarF;
float &linkVarF=ussualF;
float& linkVarF2=ussualF;
Чаще всего ссылки используются для передачи данных в функции, однако с их помощью можно сделать текст программы более понятным для чтения. Ознакомьтесь с примером приведенным ниже. Он показывает расчет стоимости покупки в магазине, где все продается по одной цене:
Для одной переменной cost
создано три псевдонима, что позволяет
точно описать как расчитывается стоимость полной покупки.