Função com passagem por referência

Por: Eduardo Casavella

Existem dois métodos de passagem de parâmetros para funções:

Passagem por valor – permite usar dentro de uma função uma cópia do valor de uma variável, porém não permite alterar o valor da variável original (somente a cópia pode ser alterada).

Passagem por referência – É passada para a função uma referência da variável, sendo possível alterar o conteúdo da variável original usando-se esta referência.

Na linguagem C a passagem por referência é implementada com o uso de ponteiros.

Usando ponteiros (também chamados de apontadores) é possível alterar os valores das variáveis passadas como argumentos para uma função.

A função utilizada dessa forma é denominada função com passagem por referência. Nesse tipo de função, os argumentos passam os endereços de memória para os parâmetros declarados na função. Sendo assim, os parâmetros que recebem os valores passados obrigatoriamente tem que ser ponteiros já que irão receber um endereço de memória.

As alterações feitas dentro da função tem efeito direto nas variáveis passadas como argumentos na chamada. Isto proporciona a oportunidade de retornar vários valores em uma única função já que as alterações ocorrem diretamente nas variáveis.


//Exemplo de programa com passagem de parâmetros por referência.

#include <stdio.h>
#include <conio.h>

//função com passagem por referência
//note que a função tem dois ponteiros como parâmetros
void troca_valores(int *ptrx, int *ptry);

int main(void)
{
int a, b;
printf("Digite o primeiro valor: ");
scanf("%d", &a);

printf("Digite o segundo valor: ");
scanf("%d", &b);

printf("Voce digitou os valores na seguinte ordem: %d e %d\n", a, b);

/* Chamada da função que troca os valores das variáveis a e b.
Observe como são passados os endereços nos argumentos.
Esta é uma função chamada por referência */
troca_valores(&a, &b);

//Exibindo os valores já trocados após a chamada da função
printf("Os valores trocados sao: %d e %d\n", a, b);

getch();
return 0;
}

//função que troca os valores inteiros apontados por ptrx e ptry
void troca_valores(int *ptrx, int *ptry)
{
int auxiliar;

//auxiliar recebe o conteúdo apontado por ptrx
auxiliar = *ptrx;

//coloca o valor que está no local apontado por ptry em ptrx
*ptrx = *ptry;

//finalmente, ptry recebe o valor armazenado em auxiliar
*ptry = auxiliar;

return;
}

Tela de Execução

tela de função com passagem

Tela de execução com passagem de parâmetros por referência.

Até a próxima!