16 de jun. de 2010

Parâmetros, Argumentos e Referência

Você sabe qual a diferença de argumentos e parâmetros?

Em subprogramação, ou seja, quando criamos funções ou métodos, podemos passar valores para a função/método.

Com isso em mente, podemos explorar as definições:

  • Parâmetros: são as variáveis que estão na assinatura da função/método.
  • Argumentos: são os valores que são passados para as funções/métodos.

Acompanhe o esquema da figura abaixo:

image

Lembre-se que em C toda chamada de uma função deve preencher completamente a assinatura dela, ou seja, se ela pede dois parâmetros, devem ser passados dois argumentos.

É possível também que se passe variáveis como argumentos:

image

Veja que agora passamos variáveis, ao invés de constantes, como argumentos. Sendo assim, podemos passar de duas maneiras as variáveis:

  • Por Valor: É copiado o valor do argumento para o parâmetro.
  • Por Referência: É feita a referência para onde a variável esta armazenada.

Na figura anterior, a passagem foi Por Valor, ou seja, os valores foram copiados para a função e as variáveis que estão dentro do main() não irão ter qualquer interferência da manipulação da função.

Se anotarmos o parâmetro com um &, daí dizemos que estamos passando a referência desta variável, veja o exemplo:

void Incrementar(int &i)
{
    i++;
}

void main()
{
    int i = 1;
    Incrementar(i);
    printf("%i", i);
    getch();
}

A saída deste algoritmo é:

image

Percebemos então que, quando passamos uma variável para uma função por referência (usando o & na definição do parâmetro), as ações que, neste caso, a função Incrementar() realizou no parâmetro, refletiram na variável da função main().

Então a passagem de parâmetros para uma função por referência ocorre quando alterações nos parâmetros formais, dentro da função, alteram os valores dos parâmetros que foram passados para a função.

O C, por padrão, faz chamadas por valor. Isto é bom quando queremos usar os parâmetros formais à vontade dentro da função, sem termos que nos preocupar em estar alterando os valores dos parâmetros que foram passados para a função.

Mas isto também pode ser ruim às vezes, porque podemos querer mudar os valores dos parâmetros fora da função também. Então podemos usar o &, um recurso de programação, para podemos usar uma chamada por referência.

Ficam alguns exercícios de fixação:

  1. Faça uma calculadora em C (Somar, Dividir, Subtrair e Multiplica) que retorne o resultado por referência.
  2. Inclua na calculadora, mais uma função para calcular o quadrado de um número, retornando o valor por referencia e tendo apenas um parâmetro em sua assinatura.

Obrigado e até + :)

0 comentários: