Если это передача по ссылке (ваш исходный вопрос был C, но C не имел передачи по ссылке, и вопрос все равно изменился, так что я отвечу в общем), это, вероятно, тот случай, x
и y
просто изменят переменные, которые переданы для них. Вот что такое ссылка, в конце концов.
В этом случае они оба являются ссылкой на одну и ту же переменную i
, поэтому ваша последовательность, вероятно, будет:
i = i + 1; // i becomes 4.
i = i + 2; // i becomes 6.
return i + i; // return i + i, or 12.
Вы можете увидеть это в работе со следующим C (используя указатели для эмуляции передачи по ссылке):
pax$ cat qq.c
#include <stdio.h>
int g(int *x, int *y) {
*x = *x + 1;
*y = *y + 2;
return *x + *y;
}
int main (void) {
int i = 3;
int rv = g (&i, &i);
printf ("Returned: %d\n", rv);
return 0;
}
pax$ gcc -o qq qq.c ; ./qq
Returned: 12
Ваш результат 9, кажется, предполагает, что ссылки отличаются друг от друга, например, в следующем коде:
#include <stdio.h>
int g(int *x, int *y) {
*x = *x + 1;
*y = *y + 2;
return *x + *y;
}
int main (void) {
int i1 = 3, i2 = 3;
int rv = g (&i1, &i2);
printf ("Returned: %d\n", rv);
return 0;
}
(это делает вывод 9), но это обычно не относится к ссылочным типам.