Myptr
是一個雙倍指針,所以*(Myptr + i)
是一個雙精度值,雖然你可以添加j
到那,你不能解引用結果。
了的聲明Myptr
這樣的:
double (*Myptr)[6] = MyArray;
然後Myptr
將是一個指向的6 double
秒的陣列。因此*(Myptr + i)
將是double[6]
,並且該表達式將起作用。
,您可以使用此語法數組索引是不幸奇怪的人誰看到它第一次,從來沒有被教導有關指針腐爛。關於C和C++數組的一個有趣的事情是,它們在幾乎所有情況下都會衰減爲指針。這意味着幾乎總是在使用數組時(存在異常),數組將隱式轉換爲指向其第一個元素的指針,其餘部分則使用指針算術完成。
例如,當您編寫MyArray[i]
時就是這種情況。該標準將MyArray[i]
定義爲*(MyArray + i)
(該標準使用更多的括號,但這是歸結爲什麼),這在您明白衰變爲指針,i
被添加到該指針並且得到的指針被解除引用時有意義。這也解釋了爲什麼i[MyArray]
同樣有效(如果風格不好)。
在多維數組的上下文中,重要的是理解多維數組僅僅是數組的數組是重要的。 就你而言是一個雙精度數組數組。那麼,MyArray[0]
是一個雙打數組。在指針衰減,衰減的指針雙打的陣列,而當你解引用該指針與數組工作,它指向,然後是陣列也衰減到指針(加倍),當您使用它。它一直在衰減。
謝謝,並感謝大家:) – 2014-12-05 14:37:51