FUNÇÕES: PASSAGEM DE PARÂMETROS Aluno:Kaynã Vasconcelos Santos Matéria: Estrutura de dados e algoritmos I Turma: 020200 Professor: Danilo Silva dos Santos PASSAGEM DE PARÂMETROS A linguagem de programação C permite que os parâmetros sejam passados para as funções de duas maneiras, por valor e por referência. PASSAGEM POR VALOR A função recebe uma cópia da variável que é fornecida quando é chamada. Todas as alterações feitas dentro da função não afetarão os valores originais. O valor da expressão é calculado, e o valor resultante é passado para a execução da função. EXEMPLO 1 #include<stdio.h> int soma(int x, int y){ return(x+y);} int main(){ int a, b, c; a= 4; b=2; c=soma(a,b); printf("%d",c); printf } PASSAGEM POR VALOR É a forma mais comum utilizada para passagem de parâmetros. Considerando as funções trigonométricas, seno, cosseno e tangente. Podemos ter a função seno, recebendo o valor de um ângulo e devolvendo o seno desse ângulo. Se tivermos as funções seno e cosseno, podemos definir uma função tangente. EXEMPLO 2 float seno (float angulo); float cosseno (float angulo); float tangente (float angulo) { float s, c; s = seno(angulo); c = cosseno(angulo); return s/c; } PASSAGEM POR VALOR Essa função calcula o seno antes de calcular o cosseno.Se a função seno modifica-se o valor do parâmetro angulo, o valor passado para a função cosseno seria diferente do valor original usado para o seno, e o resultado da função tangente estaria incorreto. A passagem por valor evita esse tipo de erro através da criação de variáveis locais para os parâmetros. Quando uma função é chamada, essas variáveis são carregadas, como em atribuições, antes do início da execução do corpo da função. PASSAGEM POR REFERÊNCIA Neste caso o que é enviado para a função é uma referência às variáveis utilizadas, e não uma simples cópia, pelo que as alterações realizadas dentro da função irão certamente alterar os valores contidos nessas variáveis. EXEMPLO 1 #include<stdio.h> void troca(int *a, int *b){ int temp; temp=*a; *a=*b; *b=temp; } int main(){ int a=2,b=3; printf("Antes de chamar a função :\na=%d\nb=%d\n",a,b); troca(&a,&b); printf("Depois de chamar a função:\na=%d\nb=%d\n",a,b); return 0; } UTILIDADE:PASSAGEM POR REFERENCIA Quando precisamos criar uma função que devolva mais de um valor, temos que definir esses parâmetros com um caractere '*' no protótipo da função, e ao chamar a função, os parâmetros utilizados na chamada correspondentes à saída precisam ser precedidos pelo caractere '&' para indicar que eles podem ser modificados pela função chamada. Um exemplo são funções que trabalham com números imaginários(precisam retornar 2 valores). EXEMPLO 2 #include <stdio.h> #include <stdlib.h> void complexo2 (float *r, float *t) { float real; real = (*r * *r) - (*t * *t); *t = 2 * *r * *t; *r = real; } void complexo2 (float *r, float *t); int main () { float a, b; printf ("Entre com um numero complexo (2 numeros inteiros): "); scanf("%f %f", &a, &b); complexo2 ( &a, &b); printf("O quadrado do número complexo é %f + i %f\n", a, b); system("pause"); return 0; }