返回值是多少?

时间:2011-11-07 05:05:52

标签: pass-by-reference

在一种通过引用传递参数的语言中,给出以下函数:

int function g(x, y) {
  x = x + 1;
  y = y + 2;
  return x + y;
}

如果调用i = 3g(i,i),返回的值是什么?我认为这是9,这是正确的吗?

1 个答案:

答案 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)但参考类型通常不是这种情况。