2010-06-03 68 views
0

假設語言支持這些評估策略,通過引用調用,按名稱調用和按值調用的結果是什麼?評估策略示例

void swap(int a; int b) 
{ 
    int temp; 
    temp = a; 
    a = b; 
    b = temp; 
} 

int i = 3; 
int A[5]; 
A[3] = 4; 
swap (i, A[3]); 
+0

這功課嗎?如果是這樣,請標記爲這樣。 – danben 2010-06-03 03:03:26

+0

不,它不是。它是一個類的例子,但是,發現http://personal.denison.edu/~krone/cs373/files/Call-by-Name-example.pdf – Andrew 2010-06-03 03:10:23

回答

1

通話按值 交換方法完成了-The變化不調用此方法後可見。 即。在swap (i, A[3])之後;

i, A[3]值不會被更改。

通過參考調用: 在調用方法之後,交換方法內所做的更改是可見的。 即。在swap (i, A[3])之後;

i, A[3]值得到交換。

,如果你使用的是C++語言作爲,則該方法的簽名應該修改成反映通:

void swap(int& a, int& b) 
{ 
    int temp; 
    temp = a; 
    a = b; 
    b = temp; 
} 
+0

因此,按價值調用會簡單地複製我和A的值[3]分別轉換爲a和b,將a與b交換,並且由於我們只是複製這些值,所以它們在交換範圍之外不會對它們執行任何操作,因爲這些值不再由任何東西引用? 而且由於它們仍然引用ref中的對象,交換完成了嗎? 上面提供的pdf用於回答danben的問題表明,在通過名稱調用時,不正確的值被交換了......這是否與ref調用一樣發生? – Andrew 2010-06-03 03:20:02

0

如果調用交換()的值什麼都不會發生。如果你通過引用來調用它,它實際上會進行交換。

當函數的目標是返回值時,按值傳遞。

當您需要更新您的參數時通過引用傳遞。