Passagem de parâmetros - Parte 1
É muito provável que, em Algoritmos e Estruturas de Dados I, você tenha utilizado funções, um recurso extremamente útil para o desenvolvimento de soluções computacionais. O uso de funções propicia inúmeros benefícios para um programa, como a modularização e o reúso de software.
Lidando com funções
Embora existam funções que não recebem parâmetros, em diversas situações lidaremos com problemas que envolvem a passagem de parâmetros para uma função. Um clássico exemplo consiste na criação de uma função que recebe três notas de um estudante e calcula a média arimética. Vejamos o código:
Caso 1
#include<stdio.h>
#include<stdlib.h>
float calcularMedia(float n1, float n2, float n3){
return (n1+n2+n3)/3;
}
int main(void){
float nota1 = 5.0, nota2 = 7.0, nota3 = 10;
float media = calcularMedia(nota1,nota2,nota3);
printf("Média: %f", media);
}
E se resolvêssemos adaptar o programa, deixando o código da seguinte forma:
#include<stdio.h>
#include<stdlib.h>
void calcularMedia(float n1, float n2, float n3, float media){
media = (n1+n2+n3)/3;
}
int main(void){
float nota1 = 5.0, nota2 = 7.0, nota3 = 10, media = -1;
calcularMedia(nota1,nota2,nota3,media);
printf("Média: %f", media);
}
A saída do programa, agora, será diferente: -1
. Mesmo que você não tenha assimilado os conceitos até aqui, já é possível perceber que a função calcularMedia
parece não ter poderes para alterar valores das variáveis criadas na função main
.
Caso 2
E se, ao invés de quatro variáveis, compartilhássemos um vetor de quatro posições com a função calcularMedia()
, como mostra o código abaixo?
#include<stdio.h>
#include<stdlib.h>
void calcularMedia(float valores[]){
valores[3] = (valores[0]+valores[1]+valores[2])/3;
}
int main(void){
float notas[] = {5,7,10,0};
calcularMedia(notas);
printf("Média: %f", notas[3]);
}
Agora, a saída do programa volta a ser a média, de aproximadamente 7,3
. Para entender porque o valor de media
não mudou no caso anterior, mas foi alterado agora, precisamos entender como funciona a passagem de valores e a alocação de memória em programas de computador.