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

Setlength的問題

答題得分者是:P.D.
kan0515
中階會員


發表:56
回覆:120
積分:50
註冊:2002-06-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-01 10:52:31 IP:211.23.xxx.xxx 未訂閱
請問一下,我的程式是這樣寫的 var Form1: TForm1; test:array of byte; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin setlength(test,4); for i:=0 to 4 do begin test[i]:=i; memo1.lines.add(inttostr(test[i])); end; setlength(test,6); for i:=0 to 6 do memo2.lines.add(inttostr(test[i])); end; 請教一下,為什麼 memo1所印出來的是01234 那到了memo2時 卻會變成了0123000 為什麼重新設定陣列時 最後一陣列時會變成0呢?
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-01 11:59:04 IP:61.219.xxx.xxx 未訂閱
setlength(test,4); for i:=0 to 4 do 0到4有5個bytes, 你只allocate 4bytes 以下同
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-01 12:11:25 IP:210.85.xxx.xxx 未訂閱
引言: 請問一下,我的程式是這樣寫的 var Form1: TForm1; test:array of byte; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin setlength(test,4); for i:=0 to 4 do begin test[i]:=i; memo1.lines.add(inttostr(test[i])); end; setlength(test,6); for i:=0 to 6 do memo2.lines.add(inttostr(test[i])); end; 請教一下,為什麼 memo1所印出來的是01234 那到了memo2時 卻會變成了0123000 為什麼重新設定陣列時 最後一陣列時會變成0呢?
幾個問題點 1.把 test:array of byte; 改為 test:array of string; 你就可以發現有好幾個問題錯誤了! 2.setlength(test,4); 表示test有四個值, 但for i:=0 to 4 do 卻指定了5個 當你設定string型態時就會出現錯誤(byte或integer不會) 所以改for i:=0 to 3 do 或setlength(test,5); 3.setlength(test,6);這只是重新指定test陣列長度, 原先的值仍會保存, 並非重設陣列, 如果要重設陣列請下 setlength(test,0); 因此你 0 to 4 的值就會被保留, 其餘的部份因為你並沒有下 test[i]:=i; 所以當然出現的都是0(另外for i:=0 to 6 do 也是和上面相同出現陣列值數目不符合的狀況)
kan0515
中階會員


發表:56
回覆:120
積分:50
註冊:2002-06-24

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