(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?
- Parâmetros são passados por valor;
- Parâmetros são passados por referência;
- Parâmetros são passados por nome;
- Parâmetros são passados por valor-resultado.
Parâmetros são passados por valor| Variável | Inicial | troca(valor, lista[0]) | troca(lista[0], lista[1]) | troca(valor, lista[valor]) |
|---|
| valor | 2 | 2 | 2 | 2 |
| lista[0] | 1 | 1 | 1 | 1 |
| lista[1] | 3 | 3 | 3 | 3 |
| lista[2] | 5 | 5 | 5 | 5 |
| lista[3] | 7 | 7 | 7 | 7 |
| lista[4] | 9 | 9 | 9 | 9 |
| a | | 2 1 | 1 3 | 2 5 |
| b | | 1 2 | 3 1 | 5 2 |
| temp | | 2 | 1 | 2 |
Parâmetros são passados por referência| Variável | Inicial | troca(valor, lista[0]) | troca(lista[0], lista[1]) | troca(valor, lista[valor]) |
|---|
| valor | 2 | 2 1 | 1 | 1 2 |
| lista[0] | 1 | 1 2 | 2 3 | 3 |
| lista[1] | 3 | 3 | 3 2 | 2 1 |
| lista[2] | 5 | 5 | 5 | 5 |
| lista[3] | 7 | 7 | 7 | 7 |
| lista[4] | 9 | 9 | 9 | 9 |
| a | | valor | lista[0] | valor |
| b | | lista[0] | lista[1] | lista[1] |
| temp | | 2 | 2 | 1 |
Parâmetros são passados por nome| Variável | Inicial | troca(valor, lista[0]) | troca(lista[0], lista[1]) | troca(valor, lista[valor]) |
|---|
| valor | 2 | 2 1 | 1 | 1 2 |
| lista[0] | 1 | 1 2 | 2 3 | 3 |
| lista[1] | 3 | 3 | 3 2 | 2 |
| lista[2] | 5 | 5 | 5 | 5 1 |
| lista[3] | 7 | 7 | 7 | 7 |
| lista[4] | 9 | 9 | 9 | 9 |
| a | | valor | lista[0] | valor |
| b | | lista[0] | lista[1] | lista[valor] |
| temp | | 2 | 2 | 1 |
Parâmetros são passados por valor-resultado| Variável | Inicial | troca(valor, lista[0]) | troca(lista[0], lista[1]) | troca(valor, lista[valor]) |
|---|
| valor | 2 | 2 1 | 1 | 1 2 |
| lista[0] | 1 | 1 2 | 2 3 | 3 |
| lista[1] | 3 | 3 | 3 2 | 2 1 |
| lista[2] | 5 | 5 | 5 | 5 |
| lista[3] | 7 | 7 | 7 | 7 |
| lista[4] | 9 | 9 | 9 | 9 |
| 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 | | 2 | 2 | 1 |
Sebesta, Robert W. (2000). Conceitos de Linguagens de Programação. 4ª edição. Porto Alegre: Bookman. 624 páginas.