Las funciones se pueden invocar de dos maneras: llamada por valor o llamada por referencia . Estas dos formas generalmente se diferencian por el tipo de valores que se les pasan como parámetros.
Los parámetros pasados a la función se denominan parámetros reales, mientras que los parámetros recibidos por la función se denominan parámetros formales .
Llamada por valor : en este método de paso de parámetros, los valores de los parámetros reales se copian en los parámetros formales de la función y los dos tipos de parámetros se almacenan en diferentes ubicaciones de memoria. Por lo tanto, los cambios realizados dentro de las funciones no se reflejan en los parámetros reales de la persona que llama.
Llamada por referencia : tanto los parámetros reales como los formales se refieren a las mismas ubicaciones, por lo que cualquier cambio realizado dentro de la función se refleja en los parámetros reales de la persona que llama.
Llamar por valor | Llamar por referencia |
---|---|
Al llamar a una función, le pasamos valores de variables. Estas funciones se conocen como «Llamada por valores». | Al llamar a una función, en lugar de pasar los valores de las variables, pasamos la dirección de las variables (ubicación de las variables) a la función conocida como «Llamada por referencias». |
En este método, el valor de cada variable en la función de llamada se copia en las variables ficticias correspondientes de la función llamada. | En este método, la dirección de las variables reales en la función que llama se copia en las variables ficticias de la función llamada. |
Con este método, los cambios realizados en las variables ficticias en la función llamada no tienen efecto en los valores de las variables reales en la función que llama. | Con este método, al usar direcciones tendríamos acceso a las variables reales y, por lo tanto, podríamos manipularlas. |
// C program to illustrate // call by value #include <stdio.h> // Function Prototype void swapx(int x, int y); // Main function int main() { int a = 10, b = 20; // Pass by Values swapx(a, b); printf("a=%d b=%d\n", a, b); return 0; } // Swap functions that swaps // two values void swapx(int x, int y) { int t; t = x; x = y; y = t; printf("x=%d y=%d\n", x, y); } Output: x=20 y=10 a=10 b=20 |
// C program to illustrate // Call by Reference #include <stdio.h> // Function Prototype void swapx(int*, int*); // Main function int main() { int a = 10, b = 20; // Pass reference swapx(&a, &b); printf("a=%d b=%d\n", a, b); return 0; } // Function to swap two variables // by references void swapx(int* x, int* y) { int t; t = *x; *x = *y; *y = t; printf("x=%d y=%d\n", *x, *y); } Output: x=20 y=10 a=20 b=10 |
Por lo tanto, los valores reales de a y b permanecen sin cambios incluso después de intercambiar los valores de x e y. | Por lo tanto, los valores reales de a y b cambian después de intercambiar los valores de x e y. |
En llamada por valores, no podemos alterar los valores de las variables reales a través de llamadas a funciones. | En la llamada por referencia podemos alterar los valores de las variables a través de llamadas a funciones. |
Los valores de las variables se pasan por la técnica Simple. | Es necesario definir variables de puntero para almacenar los valores de dirección de las variables. |
Nota: los tipos primitivos de referencia se pasan como valores y los tipos no primitivos siempre son referencias .
Publicación traducida automáticamente
Artículo escrito por AkshayGothe y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA