Допустим, у меня есть этот фрагмент кода, похожий на C ++:
int A[3] = {0, 2, 1};
void f(int x, int y) {
x++; A[1]--; y++;
print(x, y, A[0], A[1], A[2]);
}
void main() {
f(A[0], A[A[1]]);
print(A[0], A[1], A[2]);
}
Я хотел бы передать A[0]
и A[A[1]]
в f()
с использованием вызова по имени.
Вв подобной ситуации напечатанные результаты должны быть: 1 1 1 2 1 1 2 1
(это из класса языков программирования, предоставленного нашим учителем).Однако я не могу понять, как y
может быть 1 в f
при вызове print()
.Разве y
не связывается с A[A[1]]=A[2]=1
при запуске и после A[1]--
меняется на A[A[1]]=A[1]=1
? После этого y++
не сделает y
равным 2?
Более того, вчтобы A[1]
было равно 2 после A[1]--
, его нужно как-то увеличить на 1, и это именно то, что делает y++
, что означает y++=A[1]++=2
.Итак, в f
вызове print()
, y =/= A[1]
?