通过引用传递并赋值给一个变量
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。
我在研究引用传递。这让我想知道在下面的例子中会发生什么(用支持"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。