Chamada de função por referência em C
o call by referencemétodo de passar argumentos para uma função copia o endereço de um argumento no parâmetro formal. Dentro da função, o endereço é usado para acessar o argumento real usado na chamada. Isso significa que as alterações feitas no parâmetro afetam o argumento passado.
Para passar um valor por referência, ponteiros de argumento são passados para as funções como qualquer outro valor. Portanto, você precisa declarar os parâmetros da função como tipos de ponteiro como na seguinte funçãoswap(), que troca os valores das duas variáveis inteiras apontadas, por seus argumentos.
/* function definition to swap the values */
void swap(int *x, int *y) {
int temp;
temp = *x; /* save the value at address x */
*x = *y; /* put y into x */
*y = temp; /* put temp into y */
return;
}
Vamos agora chamar a função swap() passando valores por referência como no exemplo a seguir -
#include <stdio.h>
/* function declaration */
void swap(int *x, int *y);
int main () {
/* local variable definition */
int a = 100;
int b = 200;
printf("Before swap, value of a : %d\n", a );
printf("Before swap, value of b : %d\n", b );
/* calling a function to swap the values.
* &a indicates pointer to a ie. address of variable a and
* &b indicates pointer to b ie. address of variable b.
*/
swap(&a, &b);
printf("After swap, value of a : %d\n", a );
printf("After swap, value of b : %d\n", b );
return 0;
}
Vamos colocar o código acima em um único arquivo C, compilá-lo e executá-lo para produzir o seguinte resultado -
Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :200
After swap, value of b :100
Mostra que a mudança também se refletiu fora da função, ao contrário da chamada por valor, em que as mudanças não refletem fora da função.