Llamada a función por referencia en C
los call by referenceEl método de pasar argumentos a una función copia la dirección de un argumento en el parámetro formal. Dentro de la función, la dirección se usa para acceder al argumento real usado en la llamada. Significa que los cambios realizados en el parámetro afectan el argumento pasado.
Para pasar un valor por referencia, los punteros de argumento se pasan a las funciones como cualquier otro valor. Entonces, en consecuencia, debe declarar los parámetros de la función como tipos de puntero como en la siguiente funciónswap(), que intercambia los valores de las dos variables enteras apuntadas, por sus 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;
}
Llamemos ahora a la función swap() pasando valores por referencia como en el siguiente ejemplo:
#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;
}
Pongamos el código anterior en un solo archivo C, compilemos y ejecutemos, para producir el siguiente 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
Muestra que el cambio también se ha reflejado fuera de la función, a diferencia de la llamada por valor, donde los cambios no se reflejan fuera de la función.