Тема 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 создано три псевдонима, что позволяет точно описать как расчитывается стоимость полной покупки.