SóProvas


ID
17914
Banca
CESGRANRIO
Órgão
BNDES
Ano
2008
Provas
Disciplina
Programação
Assuntos

Em relação a métodos de chamada de sub-rotinas, pode-se afirmar que chamadas por

Alternativas
Comentários
  • Na chamada por valor, a expressao passada como argumento e avaliada, e o valor resultante e amarrado a variavel correspondente na fucao (frequentemente pela copia do valor para uma nova posicao de memoria). Se a funcao ou procedimento e capaz de assinalar valores a seus parametros, somente a copia local e assinalada – ou seja, qualquer coisa passada para uma chamada de funcao nao e alterada no escopo do chamador quando a funcao retorna. Na chamada por referencia, a funcao recebe uma referencia implicita ao argumento, em vez de uma copia de seu valor. Isso tipicamente significa que uma funcao pode modificar o argumento – algo que vai ser vista pelo chamador. Dessa forma, a chamada por referencia tem a vantagem de uma maior eficiencia de trempo e espaco (os argumentos nesse caso nao precisam ser copiados), assim como um potencial de maior comunicacao entrea funcao e o chamador (desde que a funcao retorna a informacao usando os argumentos de referencia), mas a desvantagem e que a funcao deve frequentemente tomar passos adicionais para “proteger” os valores que precisa passar para outras funcoes.
  • Só complementando o comentário do colega...

    Passagem por Referência

    Sempre que possível é recomendável utilizar a forma de passagem por valor, para evitar "efeitos colaterais", mas há situações onde esses efeitos são desejáveis, por exemplo, quando desejamos criar uma função que retorne mais de um valor. As funções que vimos até agora, seno, cosseno, potencia, fatorial, etc, só devolvem um valor, mas que outras funções, que trabalhem com números imaginários por exemplo, precisam retornar 2 valores. Por exemplo, tente escrever uma função que retorne o quadrado de um número imaginário.

    Poderíamos fazer uma função para retornar apenas a parte real, e outra para retornar apenas a parte imaginária. Mas o C permite criar uma função que retorne os dois valores simultaneamente. Observe a seguinte função:

    void complexo2 (float *r, float *t){   float real;   real = (*r * *r) - (*t * *t);   *t = 2 * *r * *t;   *r = real;}

    Funções do tipo void como definidas acima correspondem a funções que não retornam um valor. No entanto, o símbolo '*' na definição dos parâmetros real e imaginário da função complexo2 indicam que esses parâmetros PODEM ser modificados dentro da função, ou seja, alterações que esses parâmetros sofrerem serão sentidas FORA da função, que correspondem aos efeitos colaterais que NÃOO OCORREM quando os parâmetros são passados por valor (sem o uso do caractere '*').

    Fonte: http://www.ime.usp.br/~elo/IntroducaoComputacao/Funcoes%20passagem%20de%20parametros.htm

    O caractere "*" é definido na linguagem C como sendo ponteiro. Ele é responsável pela passagem por referência, ou seja, irá apontar para o endereço de memória que a variável encontra-se. Qualquer alteração surtirá efeito diretamente neste endereço.