看板 C_and_CPP 關於我們 聯絡資訊
用我以前用過的圖解法,動態的三維陣列會長這樣 用大小為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
OAmonkey:感謝分享 12/08 01:42
※ 編輯: loveflames 來自: 111.252.66.181 (12/08 22:03)