Tarefa
Escreva um procedimento que troque os valores de duas variáveis.
A peculiaridade dessa tarefa é que precisamos que as alterações feitas no procedimento se tornem conhecidas do programa chamador.
Vamos tentar escrever o procedimento assim:
static void Swap (int a, int b) // com tal descrição dos parâmetros do procedimento,
{ // irá copiar os valores dos argumentos (x e y)
int c; // variáveis a e b são variáveis independentes não relacionadas a x e y
c = a; a = b; b=c;
}
static void Main()
{
int x=1, y=2;
Trocar(x, y); //valores das variáveis x e y (argumentos) são copiados nos parâmetros a e b, x = 1, y = 2
}
Se você executar este programa, poderá ver que os valores das variáveis x e y não foram alterados. Para que os parâmetros alterem os valores dos argumentos, você deve usar dados passando por referência. Para isso, você deve escrever ref
antes do nome do tipo de dados no cabeçalho da sub-rotina.
void Swap ( ref int a, ref int b ) // agora as variáveis a e b obtêm os endereços das variáveis x e y na memória
{
int c;
c = a; a = b; b=c;
}
static void Main()
{
int x=1, y=2;
Swap(ref x, ref y);
Aplicação: se você passar um argumento por referência, então somente o nome da variável (NÃO um número e NÃO uma expressão aritmética) pode ficar neste lugar ao chamar o procedimento.
Você não pode chamar um procedimento como este:
Trocar(x, 4);
Trocar(5+x, y);