Задача
Составить процедуру, которая меняет местами значения двух переменных.
Особенность данной задачи заключается в том, что нам надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей программе.
Попробуем написать процедуру таким образом:
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);