Llamar-por-referencia
Hacer una llamar-por-referencia de la función, en vez de pasar la variable sí mismo, pasa la dirección de la variable. La dirección de la variable se puede tomar por usar y el operador. Las llamadas siguientes una función del intercambio que pasa la dirección de variables en vez de los valores reales.
swap(&x, &y);
El Dereferencing
El problema que tenemos ahora es que el intercambio de la función se ha pasado la dirección más bien que la variable, así que necesitamos dereference las variables de modo que estemos mirando los valores reales más bien que las direcciones de las variables para intercambiarlas.
El Dereferencing es alcanzado en C usando la notación del indicador (*). En términos simples, esto significa la colocación de a * antes de cada uno variable antes de usarlo para que refiera al valor de la variable más bien que a su dirección. El programa siguiente ilustra pasar-por-referencia para intercambiar dos valores.
#include <stdio.h>
void swap(int *x, int *y);
int main()
{
int x=6, y=10;
printf("Before the function swap, x = %d and y =
%d\n\n", x, y);
swap(&x, &y);
printf("After the function swap, x = %d and y =
%d\n\n", x, y);
return 0;
}
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
Veamos la salida del programa:
Before the function swap, x = 6 and y = 10
After the function swap, x = 10 and y = 6 |
Las funciones pueden ser recurrentes que es una función puede llamarse. Cada llamada a sí mismo requiere que el estado actual de la función esté empujado sobre el apilado. Es importante recordar este hecho pues es fácil crear un desbordamiento de apilado, es decir el apilado ha funcionado de espacio al lugar más datos.
El ejemplo siguiente calcula el factorial de un número usando la repetición. Un factorial es un número multiplicado por cada otro número entero debajo de sí mismo, abajo a 1. Por ejemplo, el factorial del número 6 es:
Factorial 6 = 6 * 5 * 4 * 3 * 2 * 1
Por lo tanto el factorial de 6 es 720. Puede ser visto del ejemplo antedicho esos 6 factoriales = 6 * 5 factoriales. Semejantemente, 5 factoriales = 5 * 4 factoriales, y así sucesivamente.
Lo que sigue es la regla general para calcular números factoriales.
factorial(n) = n * factorial(n-1)
La regla antedicha termina cuando n = 1, como el factorial de 1 es 1. Intentemos entenderla mejor con la ayuda de ejemplo:
#include <stdio.h>
long int factorial(int num);
int main()
{
int num;
long int f;
printf("Enter a number: ");
scanf("%d", &num);
f = factorial(num);
printf("factorial of %d is %ld\n", num, f);
return 0;
}
long int factorial(int num)
{
if (num == 1)
return 1;
else
return num * factorial(num-1);
}
Veamos la salida de la ejecución de este programa:
Enter a number: 7
factorial of 7 is 5040 |
|