2016-11-23 92 views
1

我說的是一個指向指針表示整數零索引矩陣,即正確的標訂購二維數組

int **mat; 

那麼什麼是代表墊[M] [正確的方法n]元素?是

*(*(mat+m)+n) 

或者是

*(*(mat+n)+m) 

另外,在視覺上來說,m和n之間,其中的一個是行索引或哪一個是列索引?或者像行和列這樣的術語在這裏有什麼意義?我相信我在這裏有一些概念上的差距,有些幫助會很大。

回答

1

表達

mat[m][n] 

被解析爲

(mat[m])[n] 

這相當於

(*(mat + m))[n] 

其又相當於

*(*(mat + m) + n) 

所以你最初的猜測是正確的。

至於哪些平均行和哪些平均列 - 在某種意義上,這取決於您自己決定。你是創建數組的人,你可以爲它分配任何你想要的語義。

在另一方面,如果要創建一個二維數組是這樣的:

int mat[A][B]; 

然後在存儲器中,這將被佈局爲

[0, 0][0, 1][0, 2]...[0, B-1][1, 0][1, 1][1, 2]... ... [A-1][B-1] 

由於參考局部性的,如果讀按照上面所示的順序(執行mat [0],mat [1]等所有操作),而不是按相反順序(do mat [0] [0])進行迭代,然後mat [1 ] [0],然後mat [2] [0]等)。從這個意義上說,將2D數組視爲具有第一個組件選擇一行並且第二個組件選擇一個列是很常見的,因爲這更自然地與內存佈局如何對齊。