看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《popopupu (碰碰碰碰碰碰碰碰碰碰碰)》之銘言: : 我想請問一下 : 如果一個3維陣列 : A[3][4][5] 是row-major的 : 這樣應該怎麼排列呢? : 我知道row major是先把一個row裡面每一個值 : 依序丟到記憶體裡 : 二維的會算 : 但三維的就不會了 : 可以請大家解說一下嗎~ 數組(很不喜歡陣列這詞,會讓人誤以為是講死2維): 假設 大小是A[N][M][L] row major (ex : C/C++): A[i][j][k] -> A[ (i * M + j) * L + k) ] cloumn major (ex : fortran) A(i, j, k) -> A( i + N * (j + k * M) ) 但若是用指標來開,就不一定嚕。 用二維來講,大小為N*M; int **A; A = (int**)malloc(N*sizeof(int*)); /* 這行意思是 開一塊空間來存N個int的指標 這空間的首位置坐標,放在A裡面 */ /*再接下來,開N塊長度為M*sizeof(int)的紀憶體空間 , 分別把其首位置座標,放在剛剛的開的那塊空間裡 */ for(int i = 0; i< N; i++) *(A + i) = (int*)malloc(M*sizeof(int)); 住意,這時"大多時候"後面開的記憶體是連續的。 但有時分配到的,有幾塊可能是"畸零地" 既該區塊,原為非使用, 但前後為使用中之記憶體區塊。 雖然機會不是很大, 但還是有一定的可能性。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.43.138.67
loveme00835:row/col major 那邊好像講剛好相反? 03/20 00:41
thx 已修改 ※ 編輯: DrStein 來自: 115.43.138.67 (03/20 00:44)
akasan:其實數組個人認為很容易讓人以為是 tuple 耶... 03/20 00:56
Seprim:原po大陸人 (確認 03/20 03:04
CRAZYFAN:數組應該是matrix中國那邊的翻譯?! 03/20 03:17
DrStein:數組-> Array, matrix-> 矩陣(專指二維) 03/20 03:20
※ 編輯: DrStein 來自: 115.43.138.67 (03/20 03:31)
legnaleurc:這邊的 tuple 應該是譯為數組,而且我第一次聽到陣列 03/23 21:40
legnaleurc:專指二維 03/23 21:40