Call by Name   vs   Call by Value

現在,我們知道,C 語言提供兩種在函式之間傳遞參數的機制:

Call by value
複製參數的值;在被呼叫之函式內改變參數的值, 不會影響原函式的變數值。
Call by nameCall by reference
看起來好像搬移參數的值;在被呼叫之函式內改變參數的值, 同時也改變了原函式的變數值。 其實 C 語言沒有這個機制,而是透過以下兩種方法達成: 以後我們還會明白,以上兩點其實是同一點。但是現在先不要說明。
以後我們還會學到其他的情形。 但是此刻,請先掌握這兩個專有名詞 (call by name 和 call by value) 的意義。

為了增強讀者的印象,這裡安插一則笑話。 德國有一位計算機學家,名叫 Niklaus Wirth, 他寫過一本演算法與資料結構的書。 他拿他自己的名字開了一個玩笑。 他的名字,以英文發音,聽起來像是 nickless worth。 nickle 是美國的五分錢, nickless worth 就是「連五分錢都不值」的意思。 他說

Whereas Europeans pronounce my name correctly (niklows virt), Americans invariably mangle it into nick-less worth. Which is to say that Europeans call me by name, but Americans call me by value.

習題

[ 前一節 ]‧[ 後一節 ]‧[ 回目錄 ]



注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。

Created: Apr 1, 2000
Last Revised: Feb 28, 2001
© Copyright 2001 Wei-Chang Shann 單維彰

shann@math.ncu.edu.tw