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.