Модуль: (C++) Подпрограммы: процедуры и функции - 1


Задача

12/12

Изменяющиеся аргументы

Теория Нажмите, чтобы прочитать/скрыть

Задача
Составить процедуру, которая меняет местами значения двух переменных.

Особенности данной задачи заключаются в том, что нам надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей программе.

Попробуем написать процедуру таким образом:
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);

Задача

Напишите процедуру, которая меняет местами значения двух переменных. Попробуйте написать ее без использования дополнительной переменной. Исправьте ошибки, если они есть.