請問Delphi的程序如何做到傳址? |
答題得分者是:cmf
|
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
以前在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 發送簡訊給我 |
//位址 交換
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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
那在請問一下,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 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |