Передача аргументов через указатель не совсем удобна, т.к. внутри функции приходится разыменовывать указатели, а при её вызове – передавать не сам параметр, а его адрес. Поэтому в C++ широко используется возможность передачи аргументов по ссылке. Так как ссылка является постоянным указателем на объект, и операция разыменования применяется к ней компилятором автоматически, работа с такими параметрами существенно проще, чем работа с аргументами-указателями.
Для передачи аргумента по ссылке нужно при объявлении перед его именем указать символ &, как и при объявлении независимой ссылки. Например, функция обмена значений аргументов местами с использованием ссылочных параметров будет выглядеть так:
void swap(int &x, int &y)
{
int t = x;
x = y;
y = t;
}
void main()
{
int a = 3, b = 7;
swap (a, b);
}
Здесь оба параметра передаются по ссылке, поэтому их изменение внутри функции влияет на фактические параметры – a и b.
Ссылки также удобны в том случае, когда по логике программы функция должна иметь несколько выходных параметров. Один выходной параметр легко реализуется через значение, которая возвращает функция оператором return в качестве результата работы. Если требуется несколько выходных аргументов, то их можно объявить в виде ссылочных параметров.
Например, функция, определяющая простейшую статистику для массива – минимальное и максимальное значения, а также среднее арифметическое его элементов.
#include <iostream>
#include<time.h>
using namespace std;
const char size = 50; // размер массива
void stat(int* mas, int &min, int &max, float &avg)