function X(var S1:String;const S2:String) S1, S2差別 |
尚未結案
|
Snooze
一般會員 發表:18 回覆:21 積分:7 註冊:2002-06-03 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
Snooze 您好: 底下程式碼供您參考:
procedure X(var S1:String; const S2:String); begin S1 := S1 '-X'; // S1的值被更改且會反映到原來的變數上。 //S2 := S2 '-X'; // 企圖更改S2的值,編譯會出錯! end; procedure TForm1.Button1Click(Sender: TObject); var myS1, myS2 : string; begin myS1 := 'FirstString'; myS2 := 'SecondString'; ShowMessage('Before calling X:'#13 myS1 #13 myS2); X(myS1, myS2); ShowMessage('After calling X:'#13 myS1 #13 myS2); end;當形式參數傳入function或procedure時,有兩種方式:傳值與傳址(或說參考reference)。 傳值:僅使用呼叫時傳入的值,其後的一切改變與原變數無關。 傳址:不僅使用呼叫時傳入的值,其後的一切改變會反映傳回原變數。 在變數前加上var表示該變數要作傳址呼叫;而在變數前加上const表示該變數要作傳值呼叫,但不希望在function或procedure後續的處理中,改變原先傳入時的值,也就是在function或procedure中要保持不變的意思。 依照您的問題我將function改為procedure,作成上述的例子請參考。 |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
差別在 S2 這個變數的值在 X 這個 function 中是不能被修改的
而 S1 這個變數可以, 例:
procedure F1(var S1: string; const S2: string); begin S1 := S1 ' is good!'; S2 := S2 'is good, too!'; // 這行會出現 "Left side cannot be assigned to" 的 Error, 表示 S2 這個變數不能被修改 end; procedure TForm1.Button1Click(Sender: TObject); var s1, s2: string; begin s1 := 'Delphi'; s2 := 'BCB'; F1(s1, s2); ShowMessage('s1 = ' s1); ShowMessage('s2 = ' s2); end;-- 向 KTop 的弟兄們致敬! |
poemkevin
初階會員 發表:26 回覆:77 積分:30 註冊:2002-10-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |