2011-11-07 84 views
0

在通过引用传递参数的语言,给出以下功能:返回值是多少?

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

如果i = 3,并且g(i,i)之称,是返回值是什么?我以为是9,这是正确的吗?

+2

这看起来像功课,请标记为这样。 – zellio

+2

C没有引用,虽然这通常意味着“通过指针”,但在你的问题中没有。你能否包含一个实际的C函数,以便我们可以回答你的问题?在任何情况下,如果'x'和'y'确实指向相同的变量,'x + y'将始终为偶数,因为它相当于'2 * x'。 – GManNickG

+0

删除C标签,因为C没有通过引用传递参数 – bdonlan

回答

2

如果它是通过引用(你的原始问题是C但C没有传递引用,并且问题自那时起改变了,所以我将一般回答),可能是这种情况xy将简单地修改为它们传入的变量。毕竟,这就是一个参考。

在这种情况下,他们都相同变量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结果似乎s至被假设引用是不同于彼此,如在下面的代码:

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