2015-05-09 67 views
0
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

回答

0

對於「調用引用」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