Setlength的問題 |
答題得分者是:P.D.
|
kan0515
中階會員 發表:56 回覆:120 積分:50 註冊:2002-06-24 發送簡訊給我 |
請問一下,我的程式是這樣寫的
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 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 請問一下,我的程式是這樣寫的 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |