通过引用传递并分配给变量

时间:2019-02-26 22:27:53

标签: pass-by-reference

我正在研究通过引用传递。这让我想知道以下示例(用支持“按引用”的伪C语言编写)会发生什么:

int foo(int a) {
    a = 5;
    return a * 2;
}

int main() {
    int a = 1;
    a = foo(a);
    printf("%d",a);
    return 0;
}

应打印什么?如果我们只做foo(a);而没有分配给a,那么我们将得到5。但是分配时会打印什么?应该是5还是10

1 个答案:

答案 0 :(得分:1)

由于a = foo(a);函数中包含main(),因此a将包含foo(a)返回的结果。无论foo(a)是什么,a总是返回10。

C不支持引用传递。将a = foo(a);更改为foo(a);意味着a将保留它传递给foo()之前的值,因此它将为1。

支持引用传递的C的一种变体是C ++。在C ++中,您可以将foo()编写为:

int foo(int &a) {
    a = 5;
    return a * 2;
}

int &a语法用于表示该参数将通过引用传递。现在,foo将为引用的变量分配5,但始终始终返回10。

在这种情况下,a = foo(a);将导致a的值为10,而单独的foo(a);将导致a的值为5。

相关问题