120 likes | 259 Views
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.
E N D
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);} • intmain(){ • 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){ • inttemp; • temp=*a; • *a=*b; • *b=temp; • } • intmain(){ • 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);intmain () {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;}