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 pelo programa chamador.
Vamos tentar escrever o procedimento assim:
void Swap ( int a, int b ) // com tal descrição dos parâmetros do procedimento,
{ // os valores dos argumentos (x e y) serão copiados,
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;
}
principal()
{
int x=1, y=2;
Trocar(x, y); // os valores das variáveis x e y (argumentos) são copiados nos parâmetros a e b
cout << "x=" << x<< ", y=" << y; // 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, deve-se utilizar passagem de dados por referência. Para isso, após o nome do tipo de dado no cabeçalho da sub-rotina, você deve colocar o sinal & code> ("e comercial").
void Swap ( int & a, 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;
}
Uso: Se você passar um argumento por referência, somente o nome da variável (NÃO um número e NÃO uma expressão aritmética) pode estar neste local ao chamar o procedimento!< br />
NÃO chame um procedimento como este:
Swap(x, 4 );
Swap(5+x, y);