Ссылки появились в C++ как синтаксический сахар над указателями.
Ссылку можно воспринимать как синоним переменной, как другое её имя.
Примеры:
int a = 5;
int &b = a; // объявление ссылки; при объявлении ссылки обязательно задать переменную, на которую она ссылается
printf("%d %d\n", a, b); // выведет 5 5
a = 7;
printf("%d %d\n", a, b); // выведет 7 7
b = 9;
printf("%d %d\n", a, b); // выведет 9 9
void f(int x, int &y){
printf("%d %d\n", x, y);
y = x * x; // y — ссылка на внешнюю переменную, её изменения отражаются на переданном аргументе
printf("%d %d\n", x, y);
x = 20; // x — локальная переменная, её изменение видно только внутри функции
printf("%d %d\n", x, y);
}
int main(){
int a = 7, b = 9;
f(a);
//f выведет:
//7 9
//7 49
//20 49
printf("%d %d\n", a, b); //выведет 7 49
}
В частности, если мы хотим передать большой объект в функцию по ссылке, мы пишем: