我正在研究通过引用传递。这让我想知道以下示例(用支持“按引用”的伪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
?
答案 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。