Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 4 Указатели и ссылки.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
211 Кб
Скачать
☆

4.2 Ссылки

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

Тип& ИмяСсылки = ИмяПеременной;

Тип &ИмяСсылки = ИмяПеременной; // РЕКОМЕНДУЕТСЯ!

Знак & в данном случае не означает операцию взятия адреса. Если он используется при объявлении переменной, то это означает объявление переменной-ссылки.

Ссылка должна обязательно инициализироваться при объявлении. Нельзя объявить ссылку, не указав, на какую переменную она ссылается.

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

В следующем примере объявлены переменные A и B типа int, а также ссылка pA на переменную A. Это означает, что у переменной A появилось второе имя pA, и теперь можно обращаться к одной и той же переменной, используя любое из этих имен. Ссылке pA присваивается значение 10, а затем печатается значение переменной A, которое также будет равно 10.

Однако нельзя впоследствии установить ту же ссылку pA на другую переменную B. Это объясняется тем, что ссылка не занимает места в памяти, поэтому она не может изменять свое значение в процессе работы в отличие от обычных переменных и переменных-указателей, которые занимают место в памяти.

int A, B;

int &pA = A;

A = 10;

printf(“pA = %d”, pA); // будет напечатано pA = 10

pA = 20;

printf(“A = %d”, A); // будет напечатано A = 20

pA = B; // ОШИБКА !

Ссылки значительно упростили работу с указателями. Они не требуют использования операции разадресации (или разыменования) указателя * для того, чтобы получить значение по указанному адресу.

ЗАМЕЧАНИЕ. Разумеется, нет никакой необходимости в использовании нескольких имен для одной и той же переменной. Поэтому основное назначение ссылок – это передача параметров функциям.

Различия между указателями и ссылками

Переменные-ссылки и указатели имеют как сходство, так и различия. Сходство заключается в том, что и те, и другие хранят адреса. Различия состоят в следующем.

• Переменная-ссылка должна инициализироваться при объявлении, тогда как при объявлении указателя нет необходимости инициализировать его.

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

• При использовании указателя для доступа к данным соответствующей переменной необходим оператор разыменования *, тогда как переменной-ссылке не требуется оператор разыменования *, поскольку сама переменная-ссылка является псевдонимом (вторым именем) переменной, на которую она ссылается.

4.3 Указатели на указатели

C++ позволяет объявлять указатель на другой указатель. Общий синтаксис для объявления указателя на указатель:

Тип** ИмяУказателя;

Пример:

int A = 18;

int *pA = &A;

int **ppA = &pA;

int ***pppA = &ppA;

printf(“A = %d”, A); // вывод, используя переменную А

printf(“A = %d”, *pA); // вывод, используя указатель pА

printf(“A = %d”, **ppA); // вывод, используя указатель ppА

printf(“A = %d”, ***pppA); // вывод, используя указатель pppА