Ejemplos tomados de here.
Código principal:
#include <stdio.h>
int a;
int main() {
a = 3;
f(4, &a);
printf("%d\n", a);
return 0;
}
llamada por valor:.
f(int x, int &y){
// x will be 3 as passed argument
x += a;
// now a is added to x so x will be 6
// but now nothing is done with x anymore
a += 2*y;
// a is still 3 so the result is 11
}
valor se pasa en y no tiene ningún efecto sobre el valor de la variable pasada en
Call por Referencia:
f(int x, int &y){
// x will be 3 as passed argument
x += a;
// now a is added to x so x will be 6
// but because & is used x is the same as a
// meaning if you change x it will change a
a += 2*y;
// a is now 6 so the result is 14
}
Se transfiere la referencia. Efectivamente, la variable en la función es la misma que en el exterior.
llamada con Copiar/Restaurar:
int a;
void unsafe(int x) {
x= 2; //a is still 1
a= 0; //a is now 0
}//function ends so the value of x is now stored in a -> value of a is now 2
int main() {
a= 1;
unsafe(a); //when this ends the value of a will be 2
printf("%d\n", a); //prints 2
}
valor se pasa en y no tiene ningún efecto sobre el valor de la variable que se pasa hasta el final de la función, en cuyo punto el valor final de la la variable de función se almacena en la variable pasada.
La diferencia básica entre llamada por referencia y copia/restauración es que los cambios realizados en la variable de función no aparecerán en la variable pasada hasta después del final de la función, mientras que los cambios de llamada por referencia se verán inmediatamente.
Aunque pude aceptar su respuesta, tuve que esperar unas horas más para poder otorgar la recompensa. Gracias por su gran respuesta y la recompensa es suya, por supuesto! – mort
Ah, no sabía eso sobre el sistema de recompensas. ¡Bueno saber! – mydogisbox