#include using std::cout, std::endl; /* В 90% случаях ссылки используются для того чтобы передать что либо в функцию Часто нам хочется передать переменную в функцию и изменить её там (внутри функции) Это можно делать и с помощью указателей, но с помощью ссылок это делать гораздо удобней Рассмотрим два эквивалентных участка кода: Передаём по указателю: Передаём по ссылке: void sqr(int* p) void sqr(int& r) { { *p = *p * *p; r = r * r; } } int main() int main() { { int a = 5; int a = 5; sqr(&a); sqr(a); cout << a << endl; cout << a << endl; } } Обратите внимание на 2 вещи: 1) Ссылку не нужно разыменовывать внутри функции, это происходит автоматически 2) При передаче в функцию, не нужно передавать адрес переменной Нужно передать саму переменную, компилятор сам вычислит её адрес При этом копирования объекта a в функцию не происходит, ссылки работают также быстро как и указатели */ void sqr(int& r) { r = r * r; } int main() { int a = 5; sqr(a); cout << a << endl; } /* Задачи: 1) Напишите функцию void inc(int& x), которая должна принимать объект типа int и увеличивать его на 1 Вызовите эту функцию из main и протестируйте её работу 2) Напишите функцию void normalize(float& x, float& y), которая должна принимать 2 объекта типа float и нормализировать их. То есть делить их на некоторое число, так чтобы было x*x + y*y == 1 Для этого x и y нужно разделить на sqrt(x*x + y*y) 3) Можно ли передать в функцию sqr не переменную, а число? То есть, можно ли написать так: sqr(5) */