在一种通过引用传递参数的语言中,给出以下函数:
int function g(x, y) {
x = x + 1;
y = y + 2;
return x + y;
}
如果调用i = 3
和g(i,i)
,返回的值是什么?我认为这是9
,这是正确的吗?
答案 0 :(得分:2)
如果它是传递参考(你的原始问题是C但是C没有传递参考,那么问题从那以后就改变了,所以我会回答一般),可能就是{ {1}}和x
只会修改为它们传入的变量。毕竟,这就是参考资料。
在这种情况下,他们都对相同的变量y
的引用,因此您的序列很可能是:
i
您可以使用以下C(使用指针模拟传递引用)来查看此操作:
i = i + 1; // i becomes 4.
i = i + 2; // i becomes 6.
return i + i; // return i + i, or 12.
您的结果似乎是假设引用彼此不同,例如在以下代码中:
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)但参考类型通常不是这种情况。