Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

(Sebesta, 2000) Considere o seguinte programa escrito na sintaxe C:

void troca(int a, int b)
{
int temp;

temp = a;
a = b;
b = temp;
}

void main()
{
int valor = 2, lista[5] = {1, 3, 5, 7, 9};

troca(valor, lista[0]);
troca(lista[0], lista[1]);
troca(valor, lista[valor]);
}

Para cada um dos métodos de passagem de parâmetros seguintes, quais são todos os valores das variáveis valor e lista depois de cada uma das três chamadas a troca?

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

 

Parâmetros são passados por valor
VariávelInicialtroca(valor, lista[0])troca(lista[0], lista[1])troca(valor, lista[valor])
valor2222
lista[0]1111
lista[1]3333
lista[2]5555
lista[3]7777
lista[4]9999
a 2 11 32 5
b 1 23 15 2
temp 212
Parâmetros são passados por referência
VariávelInicialtroca(valor, lista[0])troca(lista[0], lista[1])troca(valor, lista[valor])
valor22 111 2
lista[0]11 22 33
lista[1]333 22 1
lista[2]5555
lista[3]7777
lista[4]9999
a valorlista[0]valor
b lista[0]lista[1]lista[1]
temp 221
Parâmetros são passados por nome
VariávelInicialtroca(valor, lista[0])troca(lista[0], lista[1])troca(valor, lista[valor])
valor22 111 2
lista[0]11 22 33
lista[1]333 22
lista[2]5555 1
lista[3]7777
lista[4]9999
a valorlista[0]valor
b lista[0]lista[1]lista[valor]
temp 221
Parâmetros são passados por valor-resultado
VariávelInicialtroca(valor, lista[0])troca(lista[0], lista[1])troca(valor, lista[valor])
valor22 111 2
lista[0]11 22 33
lista[1]333 22 1
lista[2]5555
lista[3]7777
lista[4]9999
a 2 1 (valor)2 3 (lista[0])1 2 (valor)
b 1 2 (lista[0])3 2 (lista[1])2 1 (lista[1])
temp 221

Sebesta, Robert W. (2000). Conceitos de Linguagens de Programação. 4ª edição. Porto Alegre: Bookman. 624 páginas.