int f(float i, float j, float k)
{
float x=i;
i=j;
j=k;
k=x;}
main(){
float x=5; y=10 z=25;
if(...){
f(x,y,z);
}
else{
f(y,z,y); /* what's x,y,z after this line using call-by-reference and call-by-name mechanism*/
}
}
我想我对这三种传递机制有很好的理解。
在f(x,y,z)之后。 x,y,z将具有值
10 25 5如果是按参考呼叫
5 10 25如果按值调用
10 25 5如果是按价值结果调用。
(我仔细检查了答案,我确信这些是正确的)
但我对f(y,z,y)的回答是完全错误的。我通过引用得到了10,25,10,并且通过名字打电话。如果使用按引用调用并按名称调用,x,y,z的值如何在f(y,z,y)之后发生变化
答案 0 :(得分:0)
对于f(y,z,y)
的“按引用调用”,首先让我们重写f函数的代码
int f(float & i, float & j, float & k)
{
float t=i;
i=j;
j=k;
k=t;
}
(我将局部变量x
重命名为t
以避免混淆)
调用f(y,z,y)
达到以下顺序:
{
float t=y;
y=z;
z=y;
y=t;
}
初始值y = 10 z = 25,所以
float t=10;
y=25;
z=25;
y=10;
以z = 25结尾,y = 10且x不变。