Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
1
LABORATÓRIO DE PROGRAMAÇÃO I
Profa. Gisele Busichia Baioco
gisele@ft.unicamp.br
Modularização de Programas
Subprogramas em C
Parte 2 – Parâmetros
1 Introdução
De modo geral, a vinculação entre os subprogramas (procedimentos ou funções) pode
ser feita por meio da transferência ou passagem de parâmetros, que associam parâmetros
reais (usados na chamada de um subprograma) com os parâmetros formais (usados na
declaração de um subprograma). Os parâmetros podem ser classificados em três tipos:
• Parâmetros de Entrada: são aqueles que têm seus valores estabelecidos fora do
subprograma e não podem ser modificados dentro dele;
• Parâmetros de Saída: são aqueles que têm seus valores estabelecidos apenas dentro do
subprograma, ou seja, fora do subprograma eles têm valores indefinidos;
• Parâmetros de Entrada-Saída: são aqueles que têm seus valores estabelecidos fora do
subprograma, mas também podem ter seus valores alterados dentro dele.
De acordo com os três tipos de parâmetros, são utilizados três modos de passagem de
parâmetros:
• Por valor: neste tipo de passagem de parâmetros, as alterações feitas nos parâmetros
formais, dentro dos subprogramas, não se refletem nos parâmetros reais. O valor do
parâmetro real é copiado para o parâmetro formal no momento da chamada do
subprograma. Neste caso, diz-se que o parâmetro é de entrada;
• Por resultado: as alterações feitas nos parâmetros formais, dentro do subprograma, se
refletem nos parâmetros reais. O valor do parâmetro formal é copiado no parâmetro real
ao retornar do subprograma. Neste caso, diz-se que o parâmetro é de saída;
• Por referência: todas as alterações feitas nos parâmetros formais, dentro dos
subprogramas, são feitas diretamente nos parâmetros reais associados. Neste caso, diz-se
que o parâmetro é de entrada-saída.
É importante ressaltar que em linguagens de programação podem existir mais de um modo
de passagem de parâmetros com regras específicas, para indicar quais os modos se aplicam a
cada parâmetro. A convenção da linguagem C é a passagem de parâmetros por valor, mas
pode-se simular a chamada por referência passando um ponteiro para o argumento.
2
2 Passagem de Parâmetros por Valor em C
A passagem de parâmetros por valor é o método que copia o valor de um parâmetro
real para o parâmetro formal correspondente. Por convenção, C usa esse método para passar
parâmetros em suas funções.
As alterações que forem feitas nos parâmetros formais dentro da função não terão
nenhum efeito nas variáveis usadas em sua chamada (parâmetros reais).
Exemplo:
#include <stdio.h>
int sqr(int);
main()
{
int t = 10;
printf("%d %d", sqr(t), t);
}
int sqr(int x)
{
x = x * x;
return x;
}
A função sqr() copia o valor do parâmetro real t, que é 10, para o parâmetro formal x.
Na atribuição x = x * x, o parâmetro formal x será modificado localmente e a variável t, usada
na chamada de sqr(), ainda terá o valor 10. Assim, a saída desse programa será 100 10.
3 Passagem de Parâmetros por Referência em C
A passagem de parâmetros por referência é o método que copia o endereço de um
parâmetro real para o parâmetro formal da função. Dentro da função, o endereço é usado para
acessar o parâmetro real usado na chamada. Assim, qualquer alteração feita no parâmetro
formal alterará o valor do parâmetro real.
Em C pode-se simular a passagem de parâmetros por referência passando um ponteiro
para o parâmetro real. Para isso, basta declarar os parâmetros formais como sendo do tipo
ponteiro e fazer a chamada da função com o endereço dos parâmetros reais.
Exemplo:
#include <stdio.h>
void troca(int*, int*);
main()
{
int x, y;
x = 20;
y = 30;
printf(“Antes da troca: x = %d, y = %d”, x, y);
troca(&x,&y); /* chamada da função troca com o endereço dos
parâmetros reais X e y */
printf(“Depois da troca: x = %d, y = %d”, x, y);
}
3
void troca(int* a, int* b) /* parâmetros do tipo ponteiro */
{
int aux;
aux = *a; /* armazena o valor de a em aux */
*a = *b; /* armazena o valor de b em a */
*b = aux; /* armazena o valor de aux em b */
}
A função troca() troca o valor de seus dois parâmetros reais inteiros.