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

二維陣列若想當參數傳遞

尚未結案
shenglin
一般會員


發表:12
回覆:6
積分:3
註冊:2004-05-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-01 22:54:24 IP:140.118.xxx.xxx 未訂閱
大家好: 請問大家在定義函數時,想要把二維(或多維)陣列當作參數來傳遞,可是還不能確定陣列的大小(動態陣列),都是如何解決呢(二維陣列當參數傳遞時好像只能最左邊維度的可以不知道)? 謝謝指教
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-01 23:20:06 IP:211.76.xxx.xxx 未訂閱
shenglin 您好:    如果明確定義陣列的大小,就能夠將整個陣列經函式以參數形式傳過去。 如果是要動態的陣列,其實建議是把資料變成一維的形式,就能將一整塊記憶體資料傳出去,或者說是把該陣列的起始位置傳過去,同時也要告知陣列的大小,再設法存取上面的資料。 當然也可以自行建立一套存取的機制,來傳遞陣列參數,只是不知道您的應用需要的是什麼。
shenglin
一般會員


發表:12
回覆:6
積分:3
註冊:2004-05-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-01 23:44:52 IP:140.118.xxx.xxx 未訂閱
richtop 您好:        小弟是想寫一個函數:高斯消去法(Gauss Elimination)(使用maximization of pivot elements 的技巧)        以下是小弟的拙作:  
void GEMP(float m[][],float ReturnValue[])
{
 //變數宣告
 //--------------------------------------------------------------------------
 long i,j,k,n;
 long r,*c,row,col;
 float Pivot,*temp;
 row=(sizeof(m)/sizeof(float)) 1;
 col=(sizeof(m)/sizeof(float)) 2;
 //--------------------------------------------------------------------------
 if(col!=row 1)
  {
  ShowMessage("矩陣輸入有誤");
  }
 c=new long[row];
 ReturnValue=new float[row];
 temp=new float
 [col];     for(i=1;j<=row;i  )
  {
   Pivot=0;
   for(j=i;jPivot)
       {
        Pivot=abs(m[k][j]);
        r=k;
        c[i]=j;
       }
     }
   if(r!=i)
   {
    for(j=1;j
問題
小弟在宣告函數時需要定義一個動態二維陣列m[][](因為矩陣大小不定),請問有何解決方法?        謝謝指教     
        
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-02 00:35:27 IP:211.76.xxx.xxx 未訂閱
shenglin 您好:    底下的程式碼,先給您參考。 不過依照您的程式碼來看,似乎陣列是由1開始,所以我配合這種方式,刻意將指標的起始位置修改了一下,就是紅色的部分,請參考。另外陣列的大小也是要告訴函式的。 <>< class="code">//--------------------------------------------------------------------------- void showArray(float *data, int row, int col) { float **m; AnsiString msg=""; m = new float *[row 1]; // index starting from 1. for (int k=1; k<=row; k ) m[k] = data (k-1)*col-1; for (int r=1; r<=row; r ) { for (int c=1; c<=col; c ) msg = FloatToStr(m[r][c]) " "; msg = "\n"; } ShowMessage(msg); delete [] m; } void __fastcall TForm1::Button2Click(TObject *Sender) { float data[]= {11,12,13,21,22,23}; showArray(data, 2, 3); showArray(data, 3, 2); } //--------------------------------------------------------------------------- RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### 發表人 - richtop 於 2004/08/02 00:39:10
系統時間:2024-04-29 10:33:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!