2013-07-23 59 views

回答

4

ab之一必須是指針,而另一個必須是任何整數類型。證明如下。

a[b]由於是相同的(*((a)+(b)))的每個C 2011(n1570)6.5.2.1 2,ab可以使得後者表達式定義的任何類型。

根據6.5.3.2 2,一元運算符*運算符必須具有指針類型。因此,(a)+(b)的結果必須具有指針類型。

每6.5。在圖6中,二進制運算符接受各種類型的組合,但是唯一產生指針類型的組合是指針和整數的組合,如6.5.6所述8.

根據6.5.6 8,一個整數可以被添加到一個指針,並且結果具有指針操作數的類型。第6.5.6條對+的操作數的順序沒有區別,因此它們可以按任何順序排列。因此,ab之一可能是指針,而另一個將是整數。

+1

+1用於演示。 – Xaqq

+0

我會一直比較喜歡'[]'裏面的'int',因爲它最流行,也是'int [array]'不如base/index清晰。第二個'array [++ i]'對我來說是理解的,但是'++ i [array]'不是(傳染都是不一樣的),而且'array [array [array]'是錯誤的。 –

+0

只有當你可以假設你的數組不是很大時,這幾乎總是真的(除非當然不是這樣)。見http://ewontfix.com/9/ :) – loreb

0

b被稱爲索引這是一個數字。所以你可以把它作爲整數處理。 a[b]將訪問b數組a的第th個元素。

*(a + b)將在(a + (b * sizeof(data type of array element)))

0

給值少數種類可以正常工作,由於隱式轉換。

A char將被提升爲intintunsigned int也可以工作。 shortunsigned short也是有效的類型。

即使a[b]相同*(a + b)b不能是一個指針,因爲a已經是一個指針。二元運算符+不接受兩個指針。

+1

當'a'是任何整數類型,'b'是指針時,表達式'a [b]'在C中是合法的,反之亦然。二進制'+'運算符確實接受指針和整數或整數和指針。 –

+0

@EricPostpischil現在編輯清楚,我的意思是兩個指針。你的評論是真實的,但我從來沒有反對過它。 – Xaqq

5

從C標準(ISO/IEC 9899:TC2)二段6.5.2.1數組下標

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

+0

假設,會長時間工作嗎?或者它會被轉換爲整數? – zztops

+0

@zztops:任何整數類型都可以工作,包括「long」。 –

相關問題