通过引用传递并赋值给一个变量

Passing by reference and assigning into a variable

我在研究引用传递。这让我想知道在下面的例子中会发生什么(用支持"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?

由于您的 main() 函数中有 a = foo(a);,因此 a 将包含由 foo(a) 编辑的结果 return。 foo(a) 将始终 return 10,无论 a 是什么。

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 分配给引用的变量,但仍然总是 return 10。

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