2017-07-20 126 views
0

*變量[0]和變量[0] [0]是同一個東西嗎? 第一個是指向數組的第一個元素的指針。第二個是指向數組的第一個元素的數組的第一個元素。他們是否指向相同的元素?指針數組說明

+0

[ Arrays C++ Tutorails](http://www.cplusplus.com/doc/tutorial/arrays/) – FortyTwo

+0

'x [y]'被解釋爲'*(x + y)',所以是的,它們將是相同的東西 – Fureeish

+1

這將是ab etter問題,如果你說什麼'變量'是。 –

回答

3

按照C標準(6.5.2.1數組下標)

2後綴表達式,隨後在方括號表達式[] 是一個數組對象的元素的下標指定。 下標運算符[]的定義是E1 [E2]與 (*((E1)+(E2)))相同。由於適用於二元運算符 的轉換規則,如果E1是一個數組對象(等同於指向數組對象的初始元素的指針 )且E2是整數,則E1 [E2]指定E2 E1的E1元素(從零開始計數)。

和(6.3.2.1左值,數組和功能指示器)

3除了當它是sizeof運算符的操作數或一元& 操作者,或者是字符串文字用來初始化一個數組,和 將具有類型爲'''的數組類型的表達式轉換爲 表達式,其類型爲''指向類型''的指針指向數組對象的初始 元素並且不是左值。如果數組對象 具有寄存器存儲類,則行爲未定義。

該表達

variable[0] 

生成一個數組。應用一元運算符*將數組轉換爲指向其第一個元素的指針。所以

*variable[0]根據第一引用的表達式相當於variable[0][0]

在另一方面

variable[0][0]等效於表達*(variable[0] + 0),這又相當於*(variable[0])或只是*variable[0]