Funções - Passando um parâmetro por valor e referência
Projeto de pesquisa: Funções - Passando um parâmetro por valor e referência. Pesquise 862.000+ trabalhos acadêmicosPor: Wakros • 16/4/2014 • Projeto de pesquisa • 1.736 Palavras (7 Páginas) • 516 Visualizações
PROGRAMAÇÃO ESTRUTURADA II
Capítulo 1 - Funções – Passagem de Parâmetro por Valor e Referência ------------- 3 a 7
Capítulo 2 – Struct --------------------------------------------------------------------------- 8 a 9
Bibliografia ------------------------------------------------------------------------------------ 10
Capítulo 1
Funções – Passagem de Parâmetro por Valor e Referência
Resumo
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. Na passagem por valor, como o próprio nome diz, uma expressão pode ser utilizada na chamada. O valor da expressão é calculada, e o valor resultante é passado para a execução da função. Na passagem por referência, o endereço de uma variável deve ser passado na chamada da função. Dessa forma, a função pode modificar a variável diretamente, o que em geral não é recomendável, mas há situações onde esse recurso é necessário, por exemplo, para a criação de funçõesque devolvem mais de um valor.
Descrição
Até o momento, vimos apenas uma forma de passagem de parâmetros, conhecida como passagem por valor. Essa forma permite que as variáveis de uma função sejam protegidas, ou seja, apenas a função onde as variáveis foram declaradas pode modificar seu conteúdo. Permitir que uma função modifique o conteúdo de outra pode ser muito perigoso, mas há situações onde isso é necessário. Vamos primeiro lembrar como funciona a passagem por valor e depois introduzir o conceito de passagem por referência.
Passagem por Valor
É a forma mais comum utilizada para passagem de parâmetros. Por exemplo, considere a família de funções trigonométricas, como seno, cosseno, etc. A função seno, por exemplo, recebe o valor de um ângulo (um número real) e devolve o seno desse ângulo. Se tivermos as funções seno e cosseno, podemos facilmente definir uma função tangente. Em projetos grandes de desenvolvimento de software, grupos de programadores podem trabalhar no desenvolvimento de funções distintas e juntar os seus trabalhos uma vez que tenham suas funções prontas. Para isso, basta que cada grupo conheça o protótipo das funções que precisa utilizar, e ao final, um programa chamado "linker" é responsável por juntar os pedaços e construir um programa executável. Por exemplo, considere que nós temos disponíveis os seguintes protótipos para as funções seno e cosseno:
float seno (float angulo);
float cosseno (float angulo);
Conhecendo esses protótipos, podemos escrever a função tangente da seguinte forma:
float tangente (float angulo)
{
float s, c;
s = seno(angulo);
c = cosseno(angulo);
return s/c;
}
Essa função claramente calcula o seno antes de calcular o cosseno. Imagine se a função seno pudesse modificar o valor do parâmetro angulo. Nesse caso, 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 consegue evitar esse tipo de "efeito colateral" 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. Vamos falar um pouco mais do escopo de variáveis a seguir.
Escopo de variáveis
O escopo de uma variável é definido pelas regiões (blocos) onde a variável pode ser utilizada. Por exemplo, as variáveis declaradas no início do corpo da função main podem ser utilizadas em qualquer lugar dentro da função main, porém apenas DENTRO da main, ou seja, não podem ser utilizadas em outra função. Variáveis declaradas no mesmo escopo precisam ter nomes diferentes, mas nomes podem ser "reaproveitados" em outros escopos. Vejamos o exemplo abaixo:
#include
#include
int fat (int n)
{
int res = 1;
while (n > 1) {
res = res * n;
n--;
}
return res;
}
intmain ()
{
int n, res;
printf("Entre com o valor de n: ");
scanf("%d", &n);
res = fat(n+1) / (n+1);
printf("Fatorial de %d = %d\n", n, res );
system("pause");
return 0;
}
Observe que a função main e fat possuem ambas variáveis com o nome res, e que main possui uma variável chamada n, que é o nome do parâmetro da função fat. Procure não se confundir, pois apesar do mesmo nome, elas são variáveis diferentes. Para a função fat, o parâmetro n funciona como uma variável local (ou seja, válida dentro da função apenas), juntamente com a variável res. A diferença é que o parâmetro n recebe seu valor no instante da chamada. Vamos simular esse programa para a entrada 2.
O programa sempre inicia sua execução pela função main, que solicita a entrada de um valor para n. A linha res = fat(n+1)/(n+1); chama a função fat. Como n=2 (entrada do programa), então o valor 3 ( é passado para a função, ou seja, esse valor
...