Шаг 48.
Ссылки в качестве параметров функций

    На этом шаге мы рассмотрим самое популярное использование ссылок: использование в качестве параметров функций.

    Ссылочные переменные используются достаточно редко: значительно удобнее использовать саму переменную, чем ссылку на нее. В качестве параметров функции ссылки имеют более широкое применение. Ссылки особенно полезны в функциях, возвращающих несколько объектов (значений). Для иллюстрации высказанного положения изменим программу, приведенную на 46 шаге, где в функции осуществляется обмен значениями двух переменных. Добавим в программу еще одну функцию, выполняющую тот же обмен, только с использованием ссылок.

#include <iostream.h>
//Обмен с использованием указателей.
void interchange_ptr (int *u,int *v)
{
      int temp=*u;
      *u = *v; *v = temp;
}
/* ------------- */
//Обмен с использованием ссылок.
void interchange_ref (int &u,int &v)
{
      int temp=u;
      u = v; v = temp;
}
/* ------------- */
void main ()
{
      int x=5,y=10;
      /* --------------------------------------- */
      cout << "Обмен с использованием указателей:\n";
      cout << "Вначале  x = " << x << " и  y = " << y << endl;
      interchange_ptr (&x,&y);
      cout << "Теперь  x = " << x << " и  y = " << y << endl;
      cout << "-----------------------------------------" << endl;
      cout << "Обмен с использованием ссылок:\n";
      cout << "Вначале  x = " << x << " и  y = " << y << endl;
      interchange_ref (x,y);
      cout << "Теперь  x = " << x << " и  y = " << y << endl;
}
Текст этой программы можно взять здесь.

    В функции interchange_ptr() параметры описаны как указатели. Поэтому в теле этой функции выполняется их разименование, а при обращении к этой функции в качестве фактических переменных используются адреса (&x,&y) тех переменных, значения которых нужно поменять местами. В функции interchange_ref() параметрами являются ссылки. Ссылки обеспечивают доступ из тела функции к фактическим параметрам, в качестве которых используются обычные переменные, определенные в программе.

    Ссылки и указатели в качестве параметров функций тесно связаны. Рассмотрим следующую небольшую функцию:

     void f(int *ip)
     {
        *ip = 12;
     }

    Внутри этой функции осуществляется доступ к переданному аргументу, адрес которого хранится в указателе ip, с помощью следующего оператора:

     f(&ivar); //Передача адреса ivar.

    Внутри функции выражение *ip = 12; присваивает 12 переменной ivar, адрес которой был передан в функцию f(). Теперь рассмотрим аналогичную функцию, использующую ссылочные параметры:

     void f(int &ir)
     {
        ir = 12;
     }

    Указатель ip заменен ссылкой ir, которой присваивается значение 12. Выражение:

     f(ivar); //Передача ivar по ссылке.

присваивает значение ссылочному объекту: передает ivar по ссылке функции f(). Поскольку ir ссылается на ivar, то ivar присваивается значение 12.

    На следующем шаге мы закончим изучение ссылок: рассмотрим их использование в качестве результатов функций.


Предыдущий шаг Содержание Следующий шаг