Considere o seguinte programa escrito na sintaxe da linguagem de programação C:
int a, b;
void xpto (int x, int y)
{
int z = x + a;
x = y + 2;
y = y + z;
}
void main()
{
int a = 3;
int b = 2;
xpto(a, b);
printf("%d %d", a, b);
}Considerando o programa apresentado, avalie as assertivas a seguir:
Quais das assertivas apresentadas estão corretas?
A apenas as assertivas I e II.
B apenas as assertivas I e III.
C apenas as assertivas II e III.
D apenas as assertivas II e IV.
E apenas as assertivas III e IV.
I Caso os parâmetros sejam passados por valor, os valores impressos serão 3 e 2.
Na passagem de parâmetros por valor, os parâmetros x e y recebem cópias dos valores de a e b.
| Instrução | a | b | x | y | z |
|---|---|---|---|---|---|
| int a = 3; | 3 | ||||
| int b = 2; | 3 | 2 | |||
| xpto(a, b); | 3 | 2 | 3 | 2 | |
| int z = x + a; | 3 | 2 | 3 | 2 | 6 |
| x = y + 2; | 3 | 2 | 4 | 2 | 6 |
| y = y + z; | 3 | 2 | 4 | 8 | 6 |
| printf("%d %d", a, b); | 3 | 2 |
Ao retornar para main, as variáveis globais a e b não foram alteradas, com o comando printf imprimindo 3 e 2.
II Caso os parâmetros sejam passados por valor, os valores impressos serão 4 e 2.
Para que os valores impressos sejam 4 e 2, o parâmetro x precisa ser passado por referência e o parâmetro y precisa ser passado por valor.
III Caso os parâmetros sejam passados por referência, os valores impressos serão 4 e 8.
Na passagem de parâmetros por referência, os parâmetros x e y tornam-se aliases (referências diretas) para as variáveis a e b.
| Instrução | a | b | x | y | z |
|---|---|---|---|---|---|
| int a = 3; | 3 | ||||
| int b = 2; | 3 | 2 | |||
| xpto(a, b); | 3 | 2 | a | b | |
| int z = x + a; | 3 | 2 | a | b | 6 |
| x = y + 2; | 4 | 2 | a | b | 6 |
| y = y + z; | 4 | 8 | a | b | 6 |
| printf("%d %d", a, b); | 4 | 8 |
Ao retornar para main, as variáveis globais a e b foram modificadas diretamente, com o comando printf imprimindo 4 e 8.
IV Caso os parâmetros sejam passados por referência, os valores impressos serão 3 e 8.
Para que os valores impressos sejam 3 e 8, o parâmetro x precisa ser passado por valor e o parâmetro y precisa ser passado por referência.
Conforme exposto, a resposta correta é:
B apenas as assertivas I e III.