Considere o seguinte programa escrito na sintaxe C:
void next(int w, int x, int y, int z)
{
for(int i = 0; i < 3; i++)
{
w = y;
x = z;
}
}
void main()
{
int a = 1;
int b = 2;
next(b, a, b + a, b - a);
printf("%d", a);
printf("%d", b);
}
Para cada um dos métodos de passagem de parâmetros a seguir, quais são os valores impressos pelo programa.
- 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 | next(b, a, b + a, b - a) |
|---|
| a | 1 | 1 |
| b | 2 | 2 |
| w | | 2 3 3 3 |
| x | | 1 1 1 1 |
| y | | 3 |
| z | | 1 |
| i | | 0 1 2 3 |
Parâmetros são passados por referência| Variável | Inicial | next(b, a, b + a, b - a) |
|---|
| a | 1 | 1 1 1 1 |
| b | 2 | 2 3 3 3 |
| w | | b |
| x | | a |
| y | | 3 |
| z | | 1 |
| i | | 0 1 2 3 |
Parâmetros são passados por nome| Variável | Inicial | next(b, a, b + a, b - a) |
|---|
| a | 1 | 1 2 3 5 |
| b | 2 | 2 3 5 8 |
| w | | b |
| x | | a |
| y | | b + a |
| y | | b - a |
| i | | 0 1 2 3 |
Parâmetros são passados por valor-resultado| Variável | Inicial | next(b, a, b + a, b - a) |
|---|
| a | 1 | 1 1 |
| b | 2 | 2 3 |
| w | | 2 3 3 3 (b) |
| x | | 1 1 1 1 (a) |
| y | | 3 |
| z | | 1 |
| i | | 0 1 2 3 |