3 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
是。6.5.2.1第1段(C99標(biāo)準(zhǔn))描述了[]運(yùn)算符的參數(shù):
其中一個(gè)表達(dá)式的類型應(yīng)為“指向?qū)ο蟮闹羔榯ype”,另一個(gè)表達(dá)式的類型應(yīng)為整數(shù),結(jié)果的類型應(yīng)為“ type”。
6.5.2.1第2段(增加了重點(diǎn)):
表達(dá)式后跟方括號(hào)中的表達(dá)式[]是數(shù)組對(duì)象元素的下標(biāo)名稱。下標(biāo)操作符的定義[] 是E1[E2]相同(*((E1)+(E2)))。由于適用于二進(jìn)制+運(yùn)算符的轉(zhuǎn)換規(guī)則,如果if E1是一個(gè)數(shù)組對(duì)象(相當(dāng)于一個(gè)指向數(shù)組對(duì)象的初始元素的指針)并且E2是一個(gè)整數(shù),E1[E2]則將其指定為E2-th元素E1(從零開始計(jì)數(shù))。
它說(shuō)沒(méi)有什么要求參數(shù)的順序[]是理智的。

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
通常,2[a]
它與a[2]
C 相同,并且保證在C和C ++中都是等效的(假定沒(méi)有運(yùn)算符重載),因?yàn)檎缒傅哪菢?,它分別轉(zhuǎn)換為*(2+a)
或*(a+2)
。因?yàn)榧犹?hào)運(yùn)算符是可交換的,所以兩種形式是等效的。
盡管這些形式是等效的,但為了所有神圣的事情(以及將來(lái)的維護(hù)程序員),請(qǐng)相對(duì)于其他形式更喜歡“ a [2]”形式。
PS,如果確實(shí)在面試中被問(wèn)到此問(wèn)題,請(qǐng)代表C / C ++社區(qū)進(jìn)行確切的復(fù)仇,并確保您要求面試官列出所有三字母組合序列,作為您給出答案的前提。也許這會(huì)使他/她將來(lái)不再提出這樣的問(wèn)題(就實(shí)際編程而言毫無(wú)價(jià)值)。在奇怪的情況下,訪問(wèn)員實(shí)際上知道所有三個(gè)字母組合序列,您總是可以嘗試對(duì)虛擬基類的銷毀順序提出質(zhì)疑,就像虛擬思維與日常編程毫無(wú)關(guān)系一樣。

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
但在C ++中,您可以#define ARRAY_SIZE(a) (sizeof(a) / sizeof(0[a]))
用作宏來(lái)查找無(wú)法(也不能使其)工作的數(shù)組大小std::vector
以及[]
操作符重載的類型-這無(wú)法防止int *a = /*something*/; ARRAY_SIZE(a)
但對(duì)于任何事情都可以非常安全其他。(這是0[a]
我見(jiàn)過(guò)的唯一有用的用法)
- 3 回答
- 0 關(guān)注
- 687 瀏覽
添加回答
舉報(bào)