Говоря о ссылках, позвольте мне сначала рассказать историю: во дворе, где мы живём, есть маленький ребёнок по имени Ло XX. Мы любим давать ему прозвище. Видя, что он был плохо упитан, с относительно большой головой и относительно небольшим телом, мы дали ему прозвище «Редисовая голова». Итак, Ло XX — его настоящее имя, а Редисовая голова — его псевдоним. Так что же такое ссылка??

Определение:Ссылка: это псевдоним переменной.

Примечание:Что касается псевдонима, переменная не может иметь только псевдоним без собственного настоящего имени.

Ссылки на базовые типы данных

Как в следующем фрагменте кода:

Пример

#include <iostream> using namespace std; { int a = 3; int &b = a; //b — ссылка на a, то есть b — псевдоним a. //Ссылку необходимо инициализировать, иначе при компиляции возникнет ошибка b = 10; cout<< a << endl; //В этот момент значение a изменилось с исходного 3 на 10, потому что, что бы мы ни делали с псевдонимом, мы на самом деле работаем с самой переменной. Так же, как если мы попросим Редиску что-то сделать, сам Ло XX сделает это. return 0; }

Ссылки на типы структур

Как в следующем фрагменте кода:

Пример

#include <iostream> using namespace std; //Определите структуру с именем Coor, которая представляет собой координату. typedef struct { int x; int y; }Coor; int main(void) { Coor c1; //Определите переменную структуры с именем c1. Coor &c = c1; //Дайте c1 псевдоним с именем c. c.x = 10; //Присвойте значения членам данных переменной структуры через ссылку c.y = 20; cout<< c1.x << c2.y; //Результат вывода: 10 20 return 0; }

Ссылки на типы указателей

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

Определение:

Type *&pointerReferenceName = pointer;

Посмотрите на пример:

Пример

#include <iostream> using namespace std; int main(void) { int a = 10; //Определяем целочисленную переменную a, значение a равно 10. int *p = &a; //Определяем указатель, указывающий на переменную a int *&q = p; //Определяем ссылку на указатель, то есть q — псевдоним p. Способ определения: Type *&pointer_reference_name = pointer; *q = 20; //Присвоить 20 значению *q, что эквивалентно присваиванию 20 значению *p и, следовательно, эквивалентно присваиванию 20 переменной a. cout<< a << endl; //Выводимое значение a равно 20. return 0; }

Ссылки как параметры функций

До изучения ссылок, когда мы изучали язык C, мы разбирали такую классическую программу:

//Обменять два значения void fun( int *a,int *b) //Формальные параметры — две переменные-указатели на целые числа { int temp = 0; //Определите временную переменную. Хорошая привычка — объявить переменную и инициализировать её; c = *a; //Присвоить *a переменной c; *a = *b; //Присвоить *b переменной *a; *b = c; //Затем присвоить c переменной *b; на этом обмен значениями a и b завершается } int x = 10,y = 20; fun(&x,&y); //При вызове в главной функции передаваемые фактические аргументы нужно записывать как &a, &b, что неудобно и нелегко понять.

Теперь, когда мы изучили ссылки, как это должно выглядеть, чтобы реализовать ту же функциональность?

Пример

void fun (int &a, int &b) //Формальные параметры — две ссылки на целые числа { int temp = 0; temp = a; a = b; b = temp; } int x = 10,y = 20; fun(x,y); //При вызове в главной функции после передачи фактических аргументов a является псевдонимом x, а b — псевдонимом y.

Исходный адрес: https://blog.csdn.net/stop_and_go/article/details/51334137