Baixe o app para aproveitar ainda mais
Prévia do material em texto
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.
Compartilhar