不同通过机制的参数值

问题描述:

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呼叫如果是由值结果呼叫。

(我仔细检查了答案,我相信这些都是corrent)

,但我的答案是完全错误的,F(Y,Z,Y)。我通过参考电话和姓名拨打了10,25,10。如果x(y,z,y)在f(y,z,y)之后如果使用通过引用的呼叫并按名称调用,则x,y,z的值将如何变化

+1

在这个例子中,f的参数被值传递。 –

+0

我不确定C++中是否有按值调用的结果机制。你是怎么检查的? –

+0

我做了一些修改。这是我考试中的一个问题。所以我只是假设这些传递机制存在,并根据不同的传递机制看到参数将如何变化 – user2247155

对于“调用引用”f(y,z,y),首先让我们重写代码f函数

int f(float & i, float & j, float & k) 
{ 
    float t=i; 
    i=j; 
    j=k; 
    k=t; 
} 

的(I改名为局部变量xt,以免混淆)

调用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不变。

+0

非常感谢。我只是意识到我把我的答案写成了y,z,y而不是x,y,z的值。 – user2247155