Última actualización el 27 de julio de 2020
Agumentos reales #
Los argumentos que se mencionan en la llamada a la función se conoce como el argumento real. Por ejemplo:
func1(12, 23);
Aquí 12
y 23
son argumentos reales.
Los argumentos reales pueden ser constantes, variables, expresiones, etc.
12 |
func1(a, b); // here actual arguments are variablefunc1(a + b, b + a); // here actual arguments are expression |
Argumentos formales #
Los argumentos que se mencionan en la definición de la función se llaman argumentos formales. Los argumentos formales son muy similares a las variables locales dentro de la función. Al igual que las variables locales, los argumentos formales se destruyen cuando la función termina.
1234 |
int factorial(int n){ // write logic here} |
Aquí n
es el argumento formal. Cosas a recordar sobre los argumentos reales y formales.
- El orden, el número y el tipo de los argumentos reales en la llamada a la función deben coincidir con los argumentos formales de la función.
- Si hay un desajuste de tipo entre los argumentos reales y formales, entonces el compilador intentará convertir el tipo de los argumentos reales a los formales si es legal, de lo contrario, se pasará un valor basura al argumento formal.
- Los cambios realizados en el argumento formal no afectan a los argumentos reales.
El siguiente programa demuestra este comportamiento.
1 2 3 4 5 6 7 8 910111213141516171819202122232425 |
#include<stdio.h>void func_1(int);int main(){ int x = 10; printf("Before function call\n"); printf("x = %d\n", x); func_1(x); printf("After function call\n"); printf("x = %d\n", x); // signal to operating system program ran fine return 0;}void func_1(int a){ a += 1; a++; printf("\na = %d\n\n", a);} |
Aquí el valor de la variable x
es 10
antes de llamar a la función func_1()
, después de llamar a func_1()
, el valor de x
dentro de main()
sigue siendo 10
. Los cambios realizados dentro de la función func_1()
no afectan al valor de x
. Esto ocurre porque cuando pasamos valores a las funciones, se hace una copia del valor y esa copia se pasa a los argumentos formales. De ahí que los argumentos formales trabajen sobre una copia del valor original, no sobre el valor original en sí, por eso los cambios realizados dentro de func_1()
no se reflejan dentro de main()
. Este proceso se conoce como pasar argumentos usando Call by Value, discutiremos este concepto con más detalle en próximos capítulos.