Os parâmetrosd formais (variáveis locais a função chamada) são inicializados com o valor dos parâmetros reais. Passagem por valor- O valor dos parâmetros formais sendo alterado durante a execução da função não acarretará em nehuma modificação no valor dos parâmetros reais (variáveis da função chamadora). Passagem por referência- Qualquer alteração no valor dos parâmetros formais durante a execução da função será refletida no valor de seus parâmetros reais correspondentes. A linguagem C não implementa automaticamente a passsagem de parâmetros por referência. Esta deve ser simulada através da utilização de ponteiros. Ao invés de passarmos a variável como parâmetro, passamos o endereço desta variável. Sendo assim, a função que recebe pode utilizar seu valor através de indireção se ele for alterado essa alteração irá refletir fora da função. Ex: #include < stdio.h > void troca(int *a,int *b); void main() { int x=5; int y=10; printf("%d %d\n",x,y); troca (&x,&y); printf("%d %d",x,y); } void troca(int *a,int *b) { int aux; aux=*a; *a=*b; *b=aux; } Será impresso na forma: 5 10 10 5 Quando efetuamos a passagem de um vetor como parâmetro devemos ter em mente que o que está sendo passado não é realmente o vetor e sim um ponteiro para ele. Por exemplo, se temos uma função com a seguinte declaração: A lista de parâmetros formais nos dá a falsa impressão de que está sendo criada uma variável local do tipo vetor de 31 caracteres e que essa variável receberá o valor do parâmetro real correspondente. Isso não é o que acontece. Mesmo com o parâmetro formal definindo o número de elementos, não é criado um vetor de caracteres e sim um ponteiro para caracter, que receberá o endereço passado no parâmetro real (normalmente o endereço do primeiro elemento). Considerando então que o tamanho é desnecessário neste caso, ficamos com a seguinte declaração: Sabemos então que especificando o parâmetro formal desta maneira, estamos criando um ponteiro para caracter, porém conhecemos uma outra maneira mais "clara" de criar este ponteiro: A palavra const pode ser usada para transformar a passagem de vetor, uma passagem por valor e não por referência. |