3 回答

TA貢獻1811條經驗 獲得超4個贊
是。6.5.2.1第1段(C99標準)描述了[]運算符的參數:
其中一個表達式的類型應為“指向對象的指針type”,另一個表達式的類型應為整數,結果的類型應為“ type”。
6.5.2.1第2段(增加了重點):
表達式后跟方括號中的表達式[]是數組對象元素的下標名稱。下標操作符的定義[] 是E1[E2]相同(*((E1)+(E2)))。由于適用于二進制+運算符的轉換規則,如果if E1是一個數組對象(相當于一個指向數組對象的初始元素的指針)并且E2是一個整數,E1[E2]則將其指定為E2-th元素E1(從零開始計數)。
它說沒有什么要求參數的順序[]是理智的。

TA貢獻1845條經驗 獲得超8個贊
通常,2[a]
它與a[2]
C 相同,并且保證在C和C ++中都是等效的(假定沒有運算符重載),因為正如您所指的那樣,它分別轉換為*(2+a)
或*(a+2)
。因為加號運算符是可交換的,所以兩種形式是等效的。
盡管這些形式是等效的,但為了所有神圣的事情(以及將來的維護程序員),請相對于其他形式更喜歡“ a [2]”形式。
PS,如果確實在面試中被問到此問題,請代表C / C ++社區進行確切的復仇,并確保您要求面試官列出所有三字母組合序列,作為您給出答案的前提。也許這會使他/她將來不再提出這樣的問題(就實際編程而言毫無價值)。在奇怪的情況下,訪問員實際上知道所有三個字母組合序列,您總是可以嘗試對虛擬基類的銷毀順序提出質疑,就像虛擬思維與日常編程毫無關系一樣。

TA貢獻1775條經驗 獲得超8個贊
但在C ++中,您可以#define ARRAY_SIZE(a) (sizeof(a) / sizeof(0[a]))
用作宏來查找無法(也不能使其)工作的數組大小std::vector
以及[]
操作符重載的類型-這無法防止int *a = /*something*/; ARRAY_SIZE(a)
但對于任何事情都可以非常安全其他。(這是0[a]
我見過的唯一有用的用法)
- 3 回答
- 0 關注
- 686 瀏覽
添加回答
舉報