FUNCIONES - EJEMPLO DE PASO DE PARÁMETROS






Cuando se construye una función, esto es, cuando se especifica su prototipo, su encabezado y su cuerpo, puede aparecer entre paréntesis una lista de parámetros, según se ha descrito. Estos parámetros, a los cuales se les da el nombre de parámetros formales , son variables locales, como cualquier otra variable declarada dentro de la función. Sin embargo, poseen un comportamiento especializado, que hace de ellos la vía de comunicación por excelencia entre subprogramas. Consideremos el programa siguiente:

#include<stdio.h>

float suma(float, float);

int main(int argc, char * argv[])
{
 float x, y, z;

 printf("Deme el valor de x: ");
 scanf("%f", &x);
 printf("Deme el valor de y: ");
 scanf("%f", &y);

 z = suma(x, y);


 z = suma(3.0*x, 4*y +25);


 return 0;
}

float suma(float a, float b)
{
 float q;
 q = a + b;
 printf("%6.2f + %6.2f = %6.2f\n", a, b, q);
 return q;
}

/*
Deme el valor de x: 4
Deme el valor de y: 5
  4.00 +   5.00 =   9.00
 12.00 +  45.00 =  57.00

*/
Este programa consta de dos funciones, main() y suma() . La función suma() tiene dos parámetros, que son de tipo float y se llaman a y b . El programa principal, main() , llama a suma() en dos ocasiones. En la primera llamada se proporcionan los parámetros x e y . En la segunda llamada, se proporcionan 3.0*x y 4*y + 25 . Los parámetros que se adjuntan en la llamada a una función reciben el nombre de parámetros reales . Por tanto, en la primera llamada,
z = suma(x, y);

los parámetros reales son x e y . En la segunda llamada,
z = suma(3.0*x, 4*y +25);

los parámetros reales son 3.0x y 4*y + 25 .


Cuando se efectúa una llamada a una función, se evalúan las expresiones empleadas como parámetros reales y el resultado se copia en los parámetros formales correspondientes. A continuación, se ejecuta el código de la función.


¿Cómo se aplica esto al programa anterior? En la primera llamada,
z = suma(x, y);

las expresiones empleadas como parámetros reales son variables, y el resultado de evaluar una variable es su valor. Por tanto, el valor de x se copia en el parámetro formal correspondiente, que es a , y el valor de y se copia en el parámetro formal correspondiente, que es b . Esto es, al efectuar la llamada a la función es como si se ejecutase este código:
a = x;
b = y;

Después se ejecuta el código de la función, y por tanto se declara q , se almacena en q la suma de a y b , se imprimen resultados y finalmente se devuelve q como resultado de la función. El valor de q se asigna a z al volver a main() .
En la segunda llamada,
z = suma(3.0*x, 4*y +25);

se evalúa 3.0*x y se evalúa 4*y +25 . El valor obtenido al calcular 3.0*x (el parámetro real) se copia en el parámetro formal correspondiente, que es a . El valor obtenido al calcular 4*y +25 (el otro parámetro real) se copia en el parámetro formal correspondiente, que es b . Esto es, al efectuar la llamada a la función, es como si se ejecutase el código siguiente:
a = 3.0*x;
b = 4*y +25;

	
Después se ejecuta el código de la función, y por tanto se declara q , se almacena en q la suma de a y b , se imprimen resultados y finalmente se devuelve q como resultado de la función. El valor de q se asigna a z al volver a main() . Esta descripción del proceso que se sigue en la llamada a una función hace uso ciertos mecanismos internos, descritos por extenso en la sección anterior .