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.
A seguir temos o código fonte do exemplo mostrado no vídeo.
Exemplo 1 – Função com passagem por referência
#include <stdio.h> //função que soma 10 ao valor recebido void soma10(int x) { x = x + 10; printf("Valor de x apos a soma = %d \n",x); return; } void soma10p(int *x) { *x = *x + 10; printf("Valor de x apos a soma = %d \n",*x); return; } int main(void) { int numero; printf("Digite um numero: "); scanf("%d", &numero); printf("O numero digitado foi: %d \n",numero); soma10(numero); //chamada da função printf("Agora o numero vale: %d \n",numero); soma10p(&numero); //chamada da função com ponteiro como parâmetro printf("Agora o numero vale: %d \n",numero); return 0; }
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.
Veja outro exemplo a seguir onde usamos uma função com dois parâmetros por referência.
Exemplo 2 – função que troca de valores na main
O objetivo do programa abaixo é receber dois valores na main e depois, através de uma função fazer a troca dos valores recebidos nas variáveis sendo que estes valores já trocados devem ser mostrados dentro da main.
#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
Até a próxima!
3 respostas a Função com passagem por referência