【问题标题】:param value with different passing mechanism具有不同传递机制的参数值
【发布时间】:2015-07-20 12:32:49
【问题描述】:
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) 之后将如何变化

【问题讨论】:

  • 本例中f的参数是传值的。
  • 我不确定 C++ 中是否存在按值调用结果的机制。你是怎么检查的?
  • 我做了一些修改。这是我考试中的一道题。所以我只是假设这些传递机制存在,看看参数将如何根据不同的传递机制而变化

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


【解决方案1】:

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

【讨论】:

  • 非常感谢。我刚刚意识到我的答案是 y,z,y 而不是 x,y,z。
猜你喜欢
  • 1970-01-01
  • 2018-02-07
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 2020-11-19
  • 2015-11-30
相关资源
最近更新 更多