Re: [問題] 動態三維陣列(C)

看板C_and_CPP作者 (咕啾咕啾魔法陣)時間15年前 (2010/12/07 22:33), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
用我以前用過的圖解法,動態的三維陣列會長這樣 用大小為LxMxN的三維int陣列為例 記憶體內容 分配大小 array對應關係 ----- int**=index1 ↑ array[0] ----- int**=index1+M(以int*為單位) L個int** array[1] ----- ... ↓ ----- int*=index2←index1 ↑ array[0][0] ----- int*=index2+N(以int為單位) LxM個int* array[0][1] ----- ... ↓ ----- int ←index2 ↑ array[0][0][0] ----- ... LxMxN個int array[0][0][1] ----- int ↓ ↑除了最後一層 ----- 其他都要用迴圈建立對應關係 如果要推廣到三維以上 依樣畫葫蘆就行了 建一個大小為M1 x M2 x ... x Mn的n維int陣列 並將連續n個'*'號表為n* 且令K=n-1,T=n-2 (以下省略轉型的code) array= malloc(M1 * sizeof(int K*) + M1 * M2 * sizeof(int T*) \ + ... + M1 * ... * Mn * sizeof(int)); index1=array+M1; index2=index1+M1*M2; index3=index2+M1*M2*M3; . . . indexK=indexT+M1*...*MK; for(m1=0;m1<M1;m1++,index1+=M2) array[m1] = index1; for(m1=0;m1<M1;m1++) for(m2=0;m2<M2;m2++,index2+=M3) array[m1][m2]= index2; for(m1=0;m1<M1;m1++) for(m2=0;m2<M2;m2++) for(m3=0;m3<M3;m3++,index3+=M4) array[m1][m2][m3]= index3; . . . for(m1=0;m1<M1;m1++) for(.............)//中間那堆for省略 for(mK=0;mK<MK;mK++,indexK+=Mn) array[m1][m2][m3]...[mK]=indexK; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.252.66.181

12/08 01:42, , 1F
感謝分享
12/08 01:42, 1F
※ 編輯: loveflames 來自: 111.252.66.181 (12/08 22:03)
文章代碼(AID): #1C_aNCuM (C_and_CPP)
文章代碼(AID): #1C_aNCuM (C_and_CPP)