※ 引述《DickG (龍龍)》之銘言:
: ※ 引述《lilium.bbs@cszone.cc.ntu.edu.tw (totoro)》之銘言:
: : 在C語言中, 預設(default)的參數傳遞方式為
: : (A) call by value
: : (B) call by address
: : (C) call by name
: : (D) call by result
: 之前有問過…不大清楚 B C D 之差別
: 有誰要說明一下的嗎?
: 龍龍
call by address = pass the address of the parameter (applies to
variables only)
call by name = something equivalent to macro expansion (I forgot, actually)
call by result = the same as call by value, but copy the result back to
the parameter when return from function, yields similar
effect as call by address (different to call by address in
some cases with aliases)
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: 140.112.8.111
> -------------------------------------------------------------------------- <
作者: whirl (飛在空中的心) 看板: C_and_CPP
標題: Re: C的參數傳遞方式
時間: Sat May 8 18:15:42 1999
※ 引述《DickG (龍龍)》之銘言:
: ※ 引述《lilium.bbs@cszone.cc.ntu.edu.tw (totoro)》之銘言:
: : 在C語言中, 預設(default)的參數傳遞方式為
: : (A) call by value
: : (B) call by address
: : (C) call by name
: : (D) call by result
: 之前有問過…不大清楚 B C D 之差別
: 有誰要說明一下的嗎?
: 龍龍
Call by address傳址呼叫
主程式的三數稱為實際參數(actual parameter),而副程式的參數則稱
為形式參數(formal parameter)
主程式呼叫副程式時,只把實際參數的位址(Address)傳給副程式,使主副程
式的相對參數站用相同的記憶體位置,因此被呼叫程式在執行過程中,
若副程式參數值改變則相對印的主成式參數值也會改變,一般稱為
Side effect(副效應)
Call by name(傳名呼叫)
主程式參數稱為實際參數(actual parameter),而副程式的參數則稱為形
式(formal parameter)
主程式呼叫副程式時,除了把實際參數的名稱(name)傳給副程式外,並取
代整個副程式相對應之參數名稱
這種方法除了相對應參數佔相同記憶體位址外,尚須改便所有副程式相對參
數名稱,故在繫結數度上較Call-by-address(binding)稍慢,但較call by
value為快
這種方法因為容易產生不預期的結果,且破壞力強,故少用
Call by value-result(傳值-結果呼叫)
這種方法很神奇如Ada用之,除了上述可把執行結果傳回呼叫程式外,在執行
過程外,被呼叫程式可以去引用呼叫程式的實際參數actual parameter,並不
會改變其值,因此在執行過成中沒有Side effect 發生,被呼叫程式執行完畢
後再把結果傳回呼叫程式
--
"愛"不僅是一種浪漫的學習
"愛"是生命的學習
是一種很深的學問
它需要"時間"和"過程"
學習認識對方,尊重對方,接納對方
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: sun7.cc.chu.edu