2012-01-20 41 views
-1

我希望更多地瞭解參數解析。我在下面的代碼中有一個例子。 什麼結果,如果我擦肩而過參數: *值 *參考 *名稱請幫我理解參數傳遞

procedure f (x, y, z) 
x := x + 1 
y := z 
z := z + 1 

i := 0; a[0] := 10; a[1] := 11 

f (i, a[i], i) 

print i, a[0], a[1] 

如果我的理解是正確的結果是:

通過價值:1,11,12

通過參考:2,12,10

用名字:1,10,0

我在正確的方向嗎?

回答

1

我給你了部分答案

當你傳值時,你傳遞了一個變量的副本,所以你的變量不能被函數改變。 所以按值的答案應該是0,10,11,它們是i和數組的初始值。

當你通過引用傳遞它會改變你的值: 第一行將我改變爲1; 第二行會將[0]更改爲1; 第三行將我更改爲2; 這意味着它將打印2,1,11

我從來沒有關於傳遞姓名。

希望它有幫助

+0

請參閱下面的答案 –

0

當你按值傳遞,傳遞的值將是之前和呼叫到f後相同,所以第一個結果應該是0,10,11

路過名稱使用文本替換,非常就像c宏代替一樣,在Algol等語言中使用。在C它會像定義˚F宏: #define f(x,y,z) x = x + 1; y = z; z = z + 1;這將在這個例子擴大到 i = i + 1; a[i] = i; i = i + 1;產生的結果

2,10,12