全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1622
推到 Plurk!
推到 Facebook!

請教一個Procedure參數的問題

答題得分者是:xwing
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-10 18:12:57 IP:211.21.xxx.xxx 未訂閱
各位前輩好,有時候我在看程式碼的時候,看到procedure大約會使用兩種宣告方式 一、procedure ForSample(X : String); 二、procedure ForSampleVar(var X : String); 請問兩者有何不同呢? 看了一下Help,好像是說 使用第一種方式的話,若procedure內部對傳入的參數作修改,不會影響到原本的值,而使用第二種的話,會去尋找其位址並且更動其值。 例如前面提到的兩個procedure內容是 X := X ' Just a Game'; 假設某字串,StrSam := 'Life'; 呼叫第一種方式,ForSample(StrSam),之後,StrSam的值仍舊是'Life' 呼叫第二種方式,ForSampleVar(StrSam),之後,StrSam的值就成為'Life Just a Game' 不知這樣的理解是否正確?
xwing
初階會員


發表:17
回覆:56
積分:44
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-10 18:39:17 IP:163.25.xxx.xxx 未訂閱
引言: 各位前輩好,有時候我在看程式碼的時候,看到procedure大約會使用兩種宣告方式 一、procedure ForSample(X : String); 二、procedure ForSampleVar(var X : String); 請問兩者有何不同呢? 看了一下Help,好像是說 使用第一種方式的話,若procedure內部對傳入的參數作修改,不會影響到原本的值,而使用第二種的話,會去尋找其位址並且更動其值。 例如前面提到的兩個procedure內容是 X := X ' Just a Game'; 假設某字串,StrSam := 'Life'; 呼叫第一種方式,ForSample(StrSam),之後,StrSam的值仍舊是'Life' 呼叫第二種方式,ForSampleVar(StrSam),之後,StrSam的值就成為'Life Just a Game' 不知這樣的理解是否正確?
是的.沒錯:P C 把它叫做 call by address 和call by value ForSample(StrSam) begin 在這function 的stack中是拷貝一份 傳入的參數 所以在這裏對它任意撕殺不會影響到該參數原本的值 當然在這函數內是有用的,它是分身 end; ForSampleVar(StrSam) begin 在這裏它就是本尊了,對這參數的動作直接影響到該參數在 記憶体中的位置 所以離開這函數之後,對該變數所做的影響還在:P end; ------------ 保持感恩的心..
------
------------
我是瘦鵝...
jian921
一般會員


發表:1
回覆:5
積分:1
註冊:2003-01-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-12 10:13:37 IP:219.138.xxx.xxx 未訂閱
pprayer 你好﹕      在我所學的[PASCAL語言程序設計]教材裡對這個問題是這麼說的﹕      形式參數分為數值參數與變量參數兩種。在參數標識符前無保留字VAR作前綴的參數是數值參數。它只在調用時把實際參數的值傳給形式參數﹐調用結束後並不把結果帶給實際參數﹐其信息只進不出﹐是一種入口參數。      在參數標識符前有保留字VAR作前綴的參數是變量參數。他在調用時相當與變量使用﹐把實際參數的值送給形式參數﹐調用結束後還把結果帶給實際參數﹐其信息有進有出。       由於形式參數的性質不同﹐因而提供實際參數的方式也有不同。與數值參數對應的實際參數必須向形式參數提供值﹐因此其形式允許是表達式﹑常量或一個變量(必須有值)。實際上﹐一個常量或一個變量(具有值)是最簡單的表達式。與變量對應的實際參數必須向形式參數提供變量單元﹐因此其形式只能是變量。(後有一經典例程﹐但我想不必搞得那麼羅嗦) 發表人 -
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-01-14 17:05:37 IP:211.21.xxx.xxx 未訂閱
感謝兩位前輩指點,我現在懂了。
系統時間:2024-04-27 7:55:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!