Call-by-reference
Fazer uma cham-por-referência da função, em vez de passar a variável própria, passa o endereço da variável. O endereço da variável pode ser feito exame usar-se & por operador. As seguintes chamadas uma função da troca que passa o endereço das variáveis em vez dos valores reais.
swap(&x, &y);
Dereferencing
O problema que nós temos é agora que a troca da função estêve passada ao endereço melhor que à variável, assim que nós necessitamos dereference as variáveis de modo que nós estejamos olhando os valores reais melhor que os endereços das variáveis a fim as trocar.
Dereferencing é conseguido em C usando a notação do ponteiro (*). Em termos simples, isto significa colocar a * antes de cada um variável antes de usá-lo a fim de que consulte ao valor da variável melhor que a seu endereço. O seguinte programa ilustra a pass-por-referência para trocar dois 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;
}
Deixar-nos ver a saída do programa:
Before the function swap, x = 6 and y = 10
After the function swap, x = 10 and y = 6 |
As funções podem ser recursive que é uma função pode se chamar. Cada chamada a se requer que o estado atual da função está empurrado na pilha. É importante recordar este fato porque é fácil criar um excesso de pilha, isto é a pilha funcionou fora do espaço ao lugar any more dados.
O seguinte exemplo calcula o Factorial de um número usando o recursion. Um factorial é um número multiplicado por cada outro inteiro abaixo dse, para baixo a 1. Por exemplo, o factorial do número 6 é:
Factorial 6 = 6 * 5 * 4 * 3 * 2 * 1
Conseqüentemente o factorial de 6 é 720. Pode-se ver do exemplo acima esses 6 factorial = 6 * 5 factorial. Similarmente, 5 factorial = 5 * 4 factorial, e assim por diante.
O seguinte é a régua geral para calcular números factorial.
factorial(n) = n * factorial(n-1)
A régua acima termina quando n = 1, como o factorial de 1 é 1. Deixar-nos tentar compreendê-la mais melhor com a ajuda do exemplo:
#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);
}
Deixar-nos ver a saída da execução deste programa:
Enter a number: 7
factorial of 7 is 5040 |
|