不同传递机制的参数值
param value with different passing mechanism
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 的参考调用和名称调用。如果使用按引用调用和按名称调用,那么在 f(y,z,y) 之后 x、y、z 的值将如何变化
for "call by reference" for 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 不变结束。
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 的参考调用和名称调用。如果使用按引用调用和按名称调用,那么在 f(y,z,y) 之后 x、y、z 的值将如何变化
for "call by reference" for 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 不变结束。