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

陣列初始化問題

答題得分者是:taishyang
jasbeing
一般會員


發表:6
回覆:19
積分:5
註冊:2002-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-09 19:54:41 IP:140.135.xxx.xxx 未訂閱
一般宣告陣列,例如: int xy[256][256]; 初始化是使用 for(int i=0;i<256;i ) { for(int j=0;j<256;j ) { xy[i][j]=0; } } 是經過65536次的設定,於此花費了不少力氣。但又不敢保證之後的值,不用累加,或者不去使用到。 因此,不知各位前輩,有沒有其他作法,一次就初始完成。
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-09 20:02:28 IP:140.135.xxx.xxx 未訂閱
jasbeing您好: 試試
int xy[256][256]={0};
順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~
jasbeing
一般會員


發表:6
回覆:19
積分:5
註冊:2002-08-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-09 20:31:24 IP:140.135.xxx.xxx 未訂閱
#include 
//-------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD BTime;
BTime=timeGetTime(); 
int xy[256][256]={0};
Label1->Caption = IntToStr(timeGetTime()-BTime) " msec.";
}
//---------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
DWORD BTime;
BTime=timeGetTime();
int xy[256][256];
for(int i=0;i<256;i  )
{
for(int j=0;j<256;j  )
{
xy[i][j]=0;
}
}
Label2->Caption = IntToStr(timeGetTime()-BTime) " msec.";
}
//-------------------------------------------
Label1約1~5msec Label2約0~2msec 謝謝taishyang兄指教。 抱歉。 發表人 -
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-09 20:39:24 IP:140.135.xxx.xxx 未訂閱
jasbeing您好: PO程式碼的方式請參考版說明 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44216 謝謝您的配合 順心 發表人 -
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-09 20:47:57 IP:140.135.xxx.xxx 未訂閱
jasbeing您好: 可能要用下面連結RaynorPao版主的方式(第二種,某幾行程式碼所花費的時間單位在1 milliseconds 以下的時後)才能準確的算出時間 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26721 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~
jasbeing
一般會員


發表:6
回覆:19
積分:5
註冊:2002-08-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-09 21:33:28 IP:140.135.xxx.xxx 未訂閱
謝謝taishyang 兄: 由RaynorPao版主的方式(第二種) http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23951 可算出Button1方式需0.0008269秒(約0.8 milliseconds) Button2方式需0.0004835秒(約0.5 milliseconds) 此計算量值已至milliseconds數值。 但又衍生出另一個問題,電腦的運算數度P2與P4的差異會不會很大?
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-10 13:22:32 IP:211.75.xxx.xxx 未訂閱
用用ZeroMemory,memset
可樂王
一般會員


發表:4
回覆:1
積分:1
註冊:2004-02-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-10 22:43:58 IP:140.135.xxx.xxx 未訂閱
如 jcjroc 所述,使用memset也可快速初始化。    試試 char xy[256][256];      memset(xy,'0',256*256); 其結果是可以把xy字元初始化成任何字元。(上例初始成'0') 要整數則要強制轉換,若直接使用 memset 初始化 int xy[256][256],則會出現問題。 詳見 memset 的 Help。    "試"可樂
jasbeing
一般會員


發表:6
回覆:19
積分:5
註冊:2002-08-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-02-10 23:26:30 IP:140.135.xxx.xxx 未訂閱
謝謝taishyang、jcjroc以及可樂王的解說: 在嘗試以上三種方式,得出一個小小結論。 1.利用for迴圈的方式,可進行 int(約 0.5 milliseconds)及 char 的初始化。 2.直接設等於{0},進行 int 的初始化約 0.8 milliseconds,但是初始化{3}或者其他東東,會出現問題(有些並不是 3 )。 3.使用 memset 則進行 char 的初始化約 0.07 milliseconds(0.0000729秒),若 int 的初始化則出現有些未初始化的問題。 謝謝各位熱心解答,令我在初始化部分又有多一點的認知。 thx
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-02-11 11:36:43 IP:211.75.xxx.xxx 未訂閱
你一定沒看說明喔? void *memset(void *s, int c, size_t n); 那個n代表啥一思阿? 他是說那個欄位要傳入的是你想要初始的那塊記憶體的大小 int Array[10][10]; memset(Array,0,*10*sizeof(int)); 不是他怪怪的,是你下錯Size
系統時間:2024-05-04 20:09:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!