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

请教,为什么这段代码的 i 的值会是1呢??

答題得分者是:jow
zscy
一般會員


發表:1
回覆:2
積分:0
註冊:2007-09-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-07 15:06:56 IP:202.104.xxx.xxx 訂閱

[code delphi]
var
MyArray:array[1..10,1..10] of Integer;
I:Integer;
begin
I:=myarray[2,5];
showmessage(IntToStr(i));
end;
[/code]

请教,为什么这段代码的 i 的值会是1呢??
編輯記錄
zscy 重新編輯於 2007-10-07 15:49:32, 註解 無‧
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-07 15:32:26 IP:123.193.xxx.xxx 訂閱
對啊! 在我的電腦上怎麼是1242404!!!

哈, 我沒惡意, 要知道不要期待開發工具會幫你做得好好的,

MyArray: Array[1..10,1..10] of Integer;

只幫你配置記憶體, 沒說要幫你做初始化的動作.
有些工作還是要自己處理.

試試下面程式碼:
[code delphi]
procedure TForm1.Button4Click(Sender: TObject);
var
MyArray: array of array of Integer;
I: Integer;
begin
SetLength(MyArray, 10, 10);
try
I := MyArray[2,5];
ShowMessage(IntToStr(I));
finally
MyArray := nil;
end;
end;
[/code]

每次執行結果 I 都是 0,
表示說它有幫你做initial的動作^^

===================引 用 zscy 文 章===================
var
MyArray: Array[1..10,1..10] of Integer;
I:Integer;
begin
I:=myarray[2,5];
showmessage(IntToStr(i));
end;
请教,为什么这段代码的 i 的值会是1呢??
編輯記錄
jow 重新編輯於 2007-10-07 15:36:59, 註解 無‧
zscy
一般會員


發表:1
回覆:2
積分:0
註冊:2007-09-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-07 15:46:00 IP:202.104.xxx.xxx 訂閱

[code delphi]
var
MyArray: array of array of Integer;
I: Integer;
begin
SetLength(MyArray, 10, 10);
try
I := MyArray[2,5];//其实我就不明白这里的2和5代表的是数组里面的什么数,赋给I后的值为什么又会是0呢,2和5是代表这数组的Index?
ShowMessage(IntToStr(I));
finally
MyArray := nil;
end;
end;
[/code]
編輯記錄
zscy 重新編輯於 2007-10-07 15:48:11, 註解 無‧
zscy 重新編輯於 2007-10-07 15:48:39, 註解 無‧
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-07 15:58:07 IP:123.193.xxx.xxx 訂閱
(1)靜態配置
var

MyArray: array [1..10,1..10] of Integer;

這個動作是在宣告時,記憶體就已經配置好,可是沒有做初始化,
就是沒有填入某個數值(通常是零)

(2)動態配置
var
MyArray: array of array of Integer;

這個動作只宣告一個指向型態為Integer陣列的二維指標,宣告當時
並不會去配置陣列所要的記憶體.

在執行 SetLength(MyArray, 10, 10); 時才會要求系統配置,

此時系統會做以下動作:
(a)配置陣列所需記憶體
(b)初始化->填 0 值
(c)傳回陣列在系統記憶體所在的位置, 指定給 MyArray.

(1), (2)是不同的動作, 我要說的是寫程式時, 不要預設立場, compiler應該幫你做到
哪些事, 而是質疑它有沒有幫我做了; 數值還好, 如果在使用指標或物件變數(指標的
一種)時, 要隨時注意內含值的變化.


編輯記錄
jow 重新編輯於 2007-10-07 16:10:56, 註解 無‧
jow 重新編輯於 2007-10-07 16:12:22, 註解 無‧
jow 重新編輯於 2007-10-07 16:13:52, 註解 無‧
zscy
一般會員


發表:1
回覆:2
積分:0
註冊:2007-09-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-10-07 16:01:14 IP:202.104.xxx.xxx 訂閱
初到贵地,谢谢回复!
系統時間:2017-12-11 15:23:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!