2015-09-09 51 views
-1
//A structure to describe a matrix. 
typedef struct matrix{ 
    int x, y, size, original_size, *data; 
}; 
//Function to index matrices. 
int get(matrix m, int x, int y) 
{ 
    return m.data[m.original_size * (m.x + x) + m.y + y]; 
} 

我試圖理解此C代碼中的m.original_size *(m.x + x)+ m.y + y行。我需要在這一行上詳細說明,m.data [m.original_size *(m.x + x)+ m.y + y]。如何理解指向具有語法的數組的指針

我的嘗試:數據是一個指針,它指向數組m.data的地址。但後來我試圖理解聲明的其餘部分,我感到困惑。特別是*(m.x + x)+ m.y + y。

+0

你不明白你不明白。 '[]'中的所有內容都是用於計算數組索引的基本整數算術。那麼你是說你不懂整數運算?或者你不明白爲什麼**代碼是這樣做的。如果是後者,我們無法幫助您只顯示所顯示的代碼。因爲答案取決於數據是如何分配和用於程序的其餘部分的。 – kaylum

+0

這是一個使用一維數組實現的二維數組。表達式'*(mx。+ x)'計算行的位置,而'm.y + y'計算該行的列。如果它是一個二維數組,那麼它就像'm.data [m.x + x] [m.y + y]'。 – alvits

+1

@alvits數組和指針是不一樣的。你可以使用相同的語法來訪問每一個,但它們是不同的 –

回答

1

該結構設計用於表示一個矩陣(存儲在*data中)和一個子矩陣,它定義爲從第m.x行開始,並且第m.y列開始。因此,get()函數實際上是訪問子矩陣中的數據,並且將y索引轉換爲其在原始完整矩陣中的位置。

+0

換句話說,你是說m.x和m.y是出發點嗎?所以m.x + x迭代器到x?我有點困惑(m.original_size *)。 –

+0

'm.original_size'是原始矩陣的寬度。矩陣不是以二維方式存儲,而是以1D方式逐行存儲。因此,要找到(x,y)處的元素,相應的數組元素將是「m.data [x * m.original_width + y]'。 – michaelrccurtis

+0

這個函數只是略有不同,因爲它對較小的子矩陣感興趣(如上所述)。爲什麼會出現這種情況並不清楚你發佈的代碼,但推測它對於它被使用的任何算法都很有用。 – michaelrccurtis

相關問題