Модуль: C#.cПодпрограммы: процедуры и функции - 1


Задача

11/11

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

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

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

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

Попробуем написать процедуру таким образом:
static void Swap (int a, int b)   // при таком описании параметров процедуры, 
{                                 // будет происходить копирование значений аргументов (x и y)
     int c;                       // переменные a и b - самостоятельные переменные, не связанные с x и y  
     c = a; a = b; b = c;
}
static void Main()
{
     int x = 1, y = 2;
     Swap (x, y);         //значения переменных x и y (аргументы) копируются в параметры a и b, x = 1, y = 2   
}                                       
Если запустить данную программу, то можно увидеть, что значения переменных x и y не изменилось. Для того чтобы параметры изменяли значения аргументов, необходимо использовать передачу данных по ссылке. Для этого перед названием типа данных в заголовке подпрограммы необходимо написать ref.
void Swap ( ref int a, ref int b )  // теперь переменные a и b получают адреса переменных x и y в памяти
{
      int c; 
      c = a; a = b; b = c;
}
static void Main() 
{ 
    int x = 1, y = 2; 
    Swap (ref x, ref y); 

Применение: если вы передаете аргумент по ссылке, то при вызове процедуры на этом месте может стоять только имя переменной (НЕ число и НЕ арифметическое выражение).

Нельзя вызвать процедуру таким образом:
Swap(x, 4);
Swap(5+x, y);

Задача

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