Considere o seguinte programa escrito na sintaxe C:
void func (int a, int b, int c, int d)
{
for (int j = a; j < b; j++)
{
c = c + d;
}
}
void main()
{
int i = 0;
int v[5] = {1, 2, 3, 4, 5};
func(i, 5, v[i], v[i] * 2);
}
Para cada um dos métodos de passagem de parâmetros listados a seguir, quais são os valores das variáveis i e v após a chamada ao método func?
- 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 | func(i, 5, v[i], v[i] * 2) |
|---|
| i | 0 | |
| v[0] | 1 | |
| v[1] | 2 | |
| v[2] | 3 | |
| v[3] | 4 | |
| v[4] | 5 | |
| a | | 0 |
| b | | 5 |
| c | | 1 3 5 7 9 11 |
| d | | 2 |
| j | | 0 1 2 3 4 5 |
Parâmetros são passados por referência| Variável | Inicial | func(i, 5, v[i], v[i] * 2) |
|---|
| i | 0 | |
| v[0] | 1 | 1 3 5 7 9 11 |
| v[1] | 2 | |
| v[2] | 3 | |
| v[3] | 4 | |
| v[4] | 5 | |
| a | | i |
| b | | 5 |
| c | | v[0] |
| d | | 2 |
| j | | 0 1 2 3 4 5 |
Parâmetros são passados por nome| Variável | Inicial | func(i, 5, v[i], v[i] * 2) |
|---|
| i | 0 | |
| v[0] | 1 | 1 3 9 27 81 243 |
| v[1] | 2 | |
| v[2] | 3 | |
| v[3] | 4 | |
| v[4] | 5 | |
| a | | i |
| b | | 5 |
| c | | v[i] |
| d | | v[i] * 2 |
| j | | 0 1 2 3 4 5 |
Parâmetros são passados por valor-resultado| Variável | Inicial | func(i, 5, v[i], v[i] * 2) |
|---|
| i | 0 | 0 0 |
| v[0] | 1 | 1 11 |
| v[1] | 2 | |
| v[2] | 3 | |
| v[3] | 4 | |
| v[4] | 5 | |
| a | | 0 (i) |
| b | | 5 |
| c | | 1 3 5 7 9 11 (v[0]) |
| d | | 2 |
| j | | 0 1 2 3 4 5 |