Задача
Составить процедуру, которая меняет местами значения двух переменных.
Особенности данной задачи заключаются в том, что нам надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей программе.
Попробуем написать процедуру таким образом:
void Swap ( int a, int b ) // при таком описании параметров процедуры,
{ // будет происходить копирование значений аргументов (x и y),
int c; // переменные a и b - самостоятельные переменные, не связанные с x и y
c = a; a = b; b = c;
}
main()
{
int x = 1, y = 2;
Swap ( x, y ); // значения переменных x и y (аргументы) копируются в параметры a и b
cout << "x = " << x << ", y = " << y; // x = 1, y = 2
}
Если запустить данную программу, то можно увидеть, что значения переменных
x
и
y
не изменилось. Для того чтобы параметры изменяли значения аргументов необходимо использовать
передачу данных по ссылке. Для этого после названия типа данных в заголовке подпрограммы необходимо поставить знак
&
("амперсанд").
void Swap ( int & a, int & b ) // теперь переменные a и b получают адреса переменных x и y в памяти
{
int c;
c = a; a = b; b = c;
}
Применение: Если вы передаете аргумент по ссылке, то при вызове процедуры на этом месте может стоять только имя переменной (
НЕ число и НЕ арифметическое выражение)!
НЕЛЬЗЯ вызвать процедуру таким образом:
Swap(x, 4 );
Swap(5+x, y);