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

請問Delphi的程序如何做到傳址?

答題得分者是:cmf
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-03 14:58:59 IP:61.219.xxx.xxx 未訂閱
以前在C/C 寫swap函式時是 void swap(int &a,int &b) { int c; c = a; a = b; b = c; } 用 swap(a1,b1); 來呼叫 或 void swap(int *a, int *b) { int *c; c = a; a = b; b = c; } 用 swap(&a1,&b1); 來呼叫 P.S. 忘記是不是這樣子寫了,好久沒有摸C/C ,有錯的話麻煩指教 那Delphi是如何寫呢? 我的語法會Error~~~ 請問有人寫過嗎?? 以下是我的Program: procedure TForm1.SWAP(a : ^integer,b : ^integer); var c : ^integer; begin c := a; a := b; b := c; end; 在別的程序中用SWAP(@a, @b);來呼叫 可是在SWAP(a : ^integer,b : ^integer);的^就compile err 請問是否可以寫傳址的方法。 (之前在別的網站問JAVA寫SWAP整數的問題, 有人的回答是寫成物件..............@_@, 可是覺得只是整數的交換就要寫成物件, 還不如多宣告一個變數來存不是比較快, 不知道這個觀念對不對, 麻煩大家賜教,謝謝) ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-03 15:01:49 IP:61.218.xxx.xxx 未訂閱
//位址 交換 procedure TForm1.SWAP(var a : integer,var b : integer); var c :integer; begin c := integer(@a); integer(@a) := integer(@b); integer(@b) := c; end;    //值交換 procedure TForm1.SWAP(a : integer, b : integer); var c :integer; begin c := a; a := b; b := c; end;    在別的程序中用SWAP(a,b);來呼叫        僅供參考,歡迎繼續發言 發表人 - cmf 於 2003/03/03 15:11:23
------
︿︿
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-03 15:26:05 IP:61.219.xxx.xxx 未訂閱
To cmf兄: 不知道是不是我的程式寫錯 我的如下 procedure TForm1.Button1Click(Sender: TObject); var a, b : integer; begin a := 5; b := 10; swap(a,b); showmessage(inttostr(a) ' ' inttostr(b)); end; procedure TForm1.swap(a : integer;b : integer); var c : integer; Begin c := a; a := b; b := c; End; 可是顯示的結果 a 還是5, b 還是10,並沒有交換。 我想交換的內容只是swap內的變數在換,而 button的on_click內的區域變數並沒有被更動 另外一個程式, 在integer(@a) := integer(@b); 會出現Left side cannot be assigned to 的錯誤訊息~~~ 不知道是什麼原因? ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-03 15:32:39 IP:61.218.xxx.xxx 未訂閱
sorry 是我寫錯了    //位址 交換 procedure TForm1.SWAP( a : Pinteger; b : Pinteger); var c :Pinteger; begin c := a; a := b; b := c;    end;    //值交換 procedure TForm1.SWAP(var a : integer;var b : integer); var c :integer; begin c := a; a := b; b := c; end;        僅供參考,歡迎繼續發言 發表人 - cmf 於 2003/03/03 15:35:09
------
︿︿
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-03 15:36:29 IP:61.216.xxx.xxx 未訂閱
To cmf兄:    不知道是不是我的程式寫錯 我的如下    procedure TForm1.Button1Click(Sender: TObject); var    a, b : integer; begin    a :=  5;    b := 10;    swap(a,b);    showmessage(inttostr(a) + ' ' + inttostr(b)); end;    procedure TForm1.swap(a : integer;b : integer);<==a,b請設為變數參數 修改為 procedure TForm1.swap(Var a,b: integer); var c : integer; Begin c := a; a := b; b := c; End; 可是顯示的結果 a 還是5, b 還是10,並沒有交換。 我想交換的內容只是swap內的變數在換,而 button的on_click內的區域變數並沒有被更動 另外一個程式, 在integer(@a) := integer(@b); 會出現Left side cannot be assigned to 的錯誤訊息~~~ 不知道是什麼原因? ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ---------------- 發表人 - flyup 於 2003/03/03 15:42:10
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-03 15:58:33 IP:61.219.xxx.xxx 未訂閱
To cmf兄: 以下是我的程式 procedure TForm1.Button1Click(Sender: TObject); var a, b: integer; begin a := 5; b := 10; swap2(@a,@b); showmessage(inttostr(a) ' ' inttostr(b)); end; procedure TForm1.swap2(a : pinteger; b : pinteger); var c : PInteger; begin c := a; a := b; b := c; end; 結果還是5 10 ??? To flyup兄 你的方法可以了,可是我太懂的是 procedure TForm1.swap(a : integer;b : integer); 和 procedure TForm1.swap(Var a,b: integer); 有什麼差別,有沒有相關文章可以參考,謝謝~ ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-03 16:02:56 IP:211.20.xxx.xxx 未訂閱
在變數前加上VAR是表示宣告為傳址呼叫,如沒有加上任何宣告(如VAR,CONST等)則表示預設為傳值呼叫 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-03 16:03:07 IP:61.218.xxx.xxx 未訂閱
如果你是要 值交換的話 用這一個 procedure TForm1.swap(Var a,b: integer);    它相當於C   void swap(int &a,int &b)        僅供參考,歡迎繼續發言
------
︿︿
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-03 16:08:13 IP:61.219.xxx.xxx 未訂閱
那在請問一下,cmf兄的程式中,位址交換, //位址交換 procedure TForm1.SWAP( a : Pinteger; b : Pinteger); var c :Pinteger; begin c := a; a := b; b := c; end; 但是我用swap(@a,@b)呼叫時 a 和 b的值並沒有改變 不會是只是改變變數的位址,而且其本身所指到的記憶體用的值, 也一起跟著改變, 如果是這樣,那不就沒有什麼意義了, 還是我呼叫的方法不正確??? ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-03 16:10:38 IP:61.216.xxx.xxx 未訂閱
procedure TForm1.swap(Var a,b: integer);    如此,才能讓a,b同時具備輸入與輸出的性質!    procedure TForm1.swap(a,b: integer); 若主程式只傳送資料給swap程序處理!     發表人 - flyup 於 2003/03/03 18:51:29
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-03 16:23:03 IP:61.218.xxx.xxx 未訂閱
procedure TForm1.FormClick(Sender: TObject); var a,b:integer; c,d:Pinteger; begin a:=5; b:=10;    c:=@a; d:=@b; SWAP(c,d);    showmessage(inttostr(c^)+','+inttostr(d^));    end;    procedure TForm1.SWAP(var a : Pinteger;var b : Pinteger); var c :Pinteger; begin c := a; a := b; b := c; end;    僅供參考,歡迎繼續發言
------
︿︿
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-03-03 16:25:42 IP:61.219.xxx.xxx 未訂閱
謝謝大家的幫忙。 可惜得分只能給一個人~~~ 謝謝~~~ ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
系統時間:2024-05-03 17:49:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!