Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
5:
Subprogramas II
- Passagem de Parâmetros
Sumário
Revisitação à comunicação entre funções
Entrada e saída de dados de/para uma função
Modelo de comunicação entre funções
Tipos de argumentos
Métodos de passagem de parâmetros
Métodos de passagem de parâmetros em C
Alteração do valor duma variável exterior dentro duma função em C
1
O que nós já sabemos sobre
comunicação entre funções
Passagem de parâmetros / argumentos
• É uma operação de entrada de dados.
• Atribuição 1:1 de cada parâmetro concreto (ou valor) a um parâmetro formal
(que é uma variável).
Retorno/Devolução de valor
• É uma operação de saída de dados.
• Uma função devolve sempre um valor, embora possa ser um não-valor (void).
5
n
main 25 quadrado
r q
Exemplo main
#include <stdio.h>
quadrado printf
int quadrado(int);
main()
{
int r;
r = quadrado(5); 5
n
printf("Aqui vai: %i",r); main 25 quadrado
r q
}
{ main 25 printf
int q;
q = n * n;
return q;
}
4
2
Entrada e saída de dados para/de
uma função: ponto da situação
Dados de entrada: N
Dados de saída: 1
PROBLEMA:
Não pode haver mais do que 1 dado de saída
SOLUÇÃO:
definir dados de entrada que sejam também de saída
i entradas e j saídas
3
Tipos de argumentos
Nas várias linguagens de programação, podemos encontrar 3 tipos de
argumentos ou parâmetros:
de entrada
de saída
de entrada e de saída
Métodos
de passagem de parâmetros
Por valor:
É o único mecanismo de passagem de parâmetros em C, o que
significa que os parâmetros são todos de entrada (de valores).
4
Métodos
de passagem de parâmetros
Por referência:
Ideia base: Passar a própria variável em vez do seu valor.
Isto implica que alterar o valor dum parâmetro formal implica
alteração idêntica no parâmetro real.
Método de passagem de
parâmetros em C
Em C só existe passagem de parâmetros por valor!
Consequências:
5
Exemplo incorrecto: troca de
valores de duas variáveis
a x
#include <stdio.h> b y
void swap(int, int); swap
void
main()
{
int a=20, b=30;
swap(a,b); a 20 30 b
printf(“a=%d e b=%d”,a,b);
exit(0);
}
void swap(int x, int y)
{ x 20 30 y
int aux; 30 20
aux=x; x=y; y=aux;
return; 20
} aux 11
12
6
Exemplo correcto: troca de
valores de duas variáveis
&a
x
#include <stdio.h> &b y
void swap(int*, int*); swap
void
main()
{
int a=20, b=30;
a b
30
swap(&a,&b); 4048 20 30 4052
20
printf(“a=%d e b=%d”,a,b);
exit(0);
}
void swap(int *x, int *y)
{ x 4048 4052 y
int aux;
aux=*x; *x=*y; *y=aux;
return; 20
} aux 13 FIM