不同传递机制的参数值

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 不变结束。