請問那指標就是指call by reference的意思嘛?
--
[1;32m※ Origin: [33m台灣科大電子站 [37m<bbs.et.ntust.edu.tw> [m
[1;31m◆ From: [36m210.64.15.170 [m
>> 但對於整數, 就不會了. 譯器讓你有選擇, 你要
>> 用丟指標呢? 還是要直接丟值呢?
> 請問那指標就是指call by reference的意思嘛?
當你要指定 call by address/reference, 那就可
以用 "指標符" 來描述指定之. 以避免高階譯器可
能的自作聰明, 而譯成非你所需的那種參數傳遞方
式.
在大多數的高階譯器中, 當你沒指定時, 若傳整數
變數給它 (某 function ) 時, 大多會把該變數中
的數值丟過去, 而不是丟變數的位址.
一般說來, 丟值 (call by value) 的速度比較快
些, 因為它只要把參數拿起來, 就可以直接處理了
. 而非拿到了位址後, 再依位址去拿那個值.
但有時候, 光丟值時, 在運用上不是很方便. 如果
你要它去修改某變數中的內容, 若只把數值丟給它
, 它就無從得知那個變數空間是位於何處.
================
設 x 為 "整數" 變數, 在 x86 的機器運行.
---------
result = function(x)
那麼把上行敘述譯成低階時, 大致會譯成如下:
push x
call function
mov result, eax
因此在 function 中,
mov eax, [stack point + 參數 offset] ;
值就拿出來了.
-----------
若是 result = function(&x)
當譯成低階時, 那麼就會譯成如下:
push offset x
call function
mov result, eax
因此在 function 中,
mov esi, [stack point + 參數 offset] ;
mov eax, [esi]
如此才拿的到值.
-----------
我們常常在 C 的 function 範例中, 可以發現,
宣告參數時, 有時會加一個 * 符. 如:
void function(int *val1, int *val2)
{
: : :
}
當母層要 call 過來時, 所丟過來的參數, 被指定
成是一個位址. 欲存取該位址中的數值時, 就要去
依位址去做存取內容.
假如你把此位址型式的參數存在 ebx 中好了, 那
麼此時的 ebx, 就變成一個 "指標暫存器" . 同樣
的, 假如把它存在 i 變數中, 那麼此時的 i, 就
變成一個 "指標變數" ..
--
Free Tech (Win32Asm, Electronics..)
http://freetech.cjb.net/
Updated: April-15, 2004 / 14:35
指標應該是call by value傳址呼叫...
〈我記得JAVA沒有指標這種東西,怎麼會出現在這各版ㄋ????= ="""〉
call by reference是傳參考呼叫....
--
[1;36m※ Post by [37mbanana55 [36mfrom [33m220-142-28-235.dynamic.h�... [m
--
[1;33m / [37mOrigin: [31m南 [36m師 [33m資 [32m教 [37m小站 [m
[1;33m─ ● ─ [45m140.113.216.75 [m
[1;33m / [36mgicie.twbbs.org [m
call by value是 傳"值"呼叫
call by address才是您的原意吧
--
[41m [37m陰陽師: [m
[46m [34m當有事情找上自己時 要先緩得了心情 心緒有了空間 [m
[46m [34m才更能深思熟慮...也才能換掉結果.... [m
--
[1;41m╭ [44m┼ [m Or [1mig [30min [m: [43m 彰化師大生物系˙吟風‧眺月‧擎天崗 [35;47m micro.bio.ncue.edu.tw [m
[1;42m┼ [45m┘ [m A [1mut [30mho [mr: [1;31mGenux [30m從 [36m203-204-172-186.adsl.static.giga.net.tw [30m發表 [m
是阿= ="....不好意思,最近老是眼花,= ="...多謝你的補充!^.^"""
--
[1;36m※ Post by [37mbanana55 [36mfrom [33m220-142-35-31.dynamic.hi< ... [m