2012-09-24 107 views
4

我剛剛得到了解代碼如何工作的任務。二維數組,*(pointerArray [i] + j)是什麼?

int array[rows][coloums]; 
int *pointerArray[rows]; 
for (int i = 0; i < rows; i++) { 
    pointerArray[i] = array[i]; 
    for (int j = 0; j < coloums; j++) { 
    *(pointerArray[i] + j) = 0; 
    } 
} 

我courious有關的東西是*(pointerArray [I] + J),我認爲這是同樣的事情pointerArray [i] [j],因爲你可以訪問兩種方式的元素,但任何人都可以告訴我,*()實際發生了什麼?就像編譯器如何知道im要求與pointerArray [i] [j]一樣?

感謝您的答案!

+1

這或許有助於HTTP:// stackoverflow.com/questions/381542/in-c-arrays-why-is-this-true-a5-5a。另外,請不要使用家庭作業標籤,因爲它已被棄用 – chris

+0

其實'a [i]'是定義爲'*(a + i)',對於a和i的任意組合,其中一個是指針,另一個是整數。 –

+0

好的,我會記住chris,謝謝。 – Destidom

回答

2

在這種情況下,*運營商是解引用運營商。它預先設定的值將是內存中將返回值的位置。

括號是分組加法操作,以便編譯器知道這個添加的結果將用於解引用。這只是一個操作次序的例子。

請記住,[]運算符與解引用運算符的作用相同,因爲數組本質上是一種指針變量。如果將二維數組想象爲具有行和列的值的二維網格,則在內存中將數據佈置爲使得每一行按順序依次串聯。數組中的第一個索引(i)和數組類型(int)告訴編譯器在哪個偏移位置查找行中的第一個位置。數組中的第二個索引(j)告訴它在該行內的哪個偏移處查找。

*(pointerArray[i] + j)基本上意味着:?「查找pointerArray數據i第i行的開始,然後挑選該行的j個元素,並給我,價值

3

這樣做pointerArray[i] + j,則請求元素pointerArray[i],這是一個int*,和增量,通過j指針(也返回一個int*)。 *(...)只是取消引用指針,並在該位置返回int*被稱爲解引用運算符(在這種情況下)。所以是的,這相當於pointerArray[i][j]