具有不同传递机制的参数值

时间:2015-05-09 18:05:57

标签: c++ pass-by-reference pass-by-value

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)之后发生变化

1 个答案:

答案 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不变。