線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1543
推到 Plurk!
推到 Facebook!

function X(var S1:String;const S2:String) S1, S2差別

尚未結案
Snooze
一般會員


發表:18
回覆:21
積分:7
註冊:2002-06-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-04 14:04:08 IP:61.220.xxx.xxx 未訂閱
function X(var S1:String;const S2:String) 從外部帶入S1 & S2 都可以回傳 function X 內運算過後的值 不曉得var 與 const 差別在哪.
------
Nice to meet u
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-04 14:49:56 IP:211.76.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-04 14:51:31 IP:202.39.xxx.xxx 未訂閱
差別在 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-05 09:06:48 IP:210.202.xxx.xxx 未訂閱
對不起, 插個話一下: var 顧名思義, 變數, 就是可變動的數值 const 宣告, 就是不可變數. 通常用於程序前一些常用的數值, 例如圓周率=3.1415 宣告它為3.1415, 是一些運算的基礎值, 總不能把它定義為變數, 而讓圓周率隨時都在變吧 覺得樓上的大哥就解釋得很清楚了. 謝謝! 使我這個delphi菜鳥有所受益!
系統時間:2024-05-03 13:34:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!