Re: [問題] 動態三維陣列(C)
用我以前用過的圖解法,動態的三維陣列會長這樣
用大小為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)
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
問題
2
39