假設語言支持這些評估策略,通過引用調用,按名稱調用和按值調用的結果是什麼?評估策略示例
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]);
假設語言支持這些評估策略,通過引用調用,按名稱調用和按值調用的結果是什麼?評估策略示例
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]);
通話按值 交換方法完成了-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;
}
因此,按價值調用會簡單地複製我和A的值[3]分別轉換爲a和b,將a與b交換,並且由於我們只是複製這些值,所以它們在交換範圍之外不會對它們執行任何操作,因爲這些值不再由任何東西引用? 而且由於它們仍然引用ref中的對象,交換完成了嗎? 上面提供的pdf用於回答danben的問題表明,在通過名稱調用時,不正確的值被交換了......這是否與ref調用一樣發生? – Andrew 2010-06-03 03:20:02
如果調用交換()的值什麼都不會發生。如果你通過引用來調用它,它實際上會進行交換。
當函數的目標是返回值時,按值傳遞。
當您需要更新您的參數時通過引用傳遞。
這功課嗎?如果是這樣,請標記爲這樣。 – danben 2010-06-03 03:03:26
不,它不是。它是一個類的例子,但是,發現http://personal.denison.edu/~krone/cs373/files/Call-by-Name-example.pdf – Andrew 2010-06-03 03:10:23