【问题标题】:What is the returned value?返回值是多少?
【发布时间】:2011-11-07 05:05:52
【问题描述】:

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

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

如果调用i = 3g(i,i),返回的值是多少?我还以为是9,对吗?

【问题讨论】:

  • 这看起来像家庭作业,请标记它。
  • C 没有引用,虽然这通常意味着“通过指针”,但您的问题中没有。您能否包含一个实际的 C 函数,以便我们回答您的问题?在任何情况下,如果xy 以某种方式引用同一个变量,x + y 将始终是偶数,因为它等同于2 * x
  • 删除了 C 标签,因为 C 不通过引用传递参数
  • @Mimisbrunnr:为什么要编辑它以使其更少有效C?让 OP 修复他的代码。
  • @Matt:提示 - 如果 x 和 y 都引用同一个变量,您可以将 x 和 y 都替换为 z 并查看代码的作用。

标签: pass-by-reference


【解决方案1】:

如果它是按引用传递(您最初的问题是 C,但 C 没有按引用传递,并且从那时起问题已经改变,所以我会笼统地回答),这可能是 @ 987654321@ 和y 将简单地修改为它们传入的变量。毕竟,这就是参考。

在这种情况下,它们都是相同变量i的引用,因此您的序列可能是:

i = i + 1;       // i becomes 4.
i = i + 2;       // i becomes 6.
return i + i;    // return i + i, or 12.

你可以在下面的 C 中看到这一点(使用指针来模拟 pass-by-reference):

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)但引用类型通常不是这种情况。

【讨论】:

    猜你喜欢
    • 2017-01-06
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2020-12-13
    相关资源
    最近更新 更多