欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
CSDN技術(shù)中心 第四章 [ ]運算符的本質(zhì)

第四章 [ ]運算符的本質(zhì)

數組是存在于人們頭腦中的一個(gè)邏輯概念,而編譯器其實(shí)并不知道有數組這個(gè)東西,它所知道的,只是[]運算符,當遇到[]運算符的時(shí)候,編譯器只是簡(jiǎn)單地把它轉換為類(lèi)似*(*(a+i)+j)這樣的等價(jià)表達式,之所以是這種表達式,如前幾章所述,是因為C語(yǔ)言的數組實(shí)現本質(zhì)上是數組的嵌套。

        由于這種等價(jià)關(guān)系的存在,會(huì )產(chǎn)生一些古零精怪的表達式,例如:

10[a]

這個(gè)表達式初看上去讓人摸不著(zhù)頭腦,它是什么呢?如上所述,編譯器會(huì )把它轉換為*(10+a),把a和10調換一下,就是*(a+10)了,這個(gè)就是a[10]。

[]運算符之前還可以是一個(gè)表達式,例如:(10+20)[a]。

嚴格來(lái)講,以上兩個(gè)表達式是非法的,因為C89對于數組的引用(注意不是數組定義)規定:帶下標的數組引用后綴表達式由一個(gè)后綴表達式后跟一個(gè)括在方括號中的表達式組成。方括號前的后綴表達式的類(lèi)型必須為“指向T類(lèi)型的指針”,其中T為某種類(lèi)型;方括號中表達式的類(lèi)型必須為整型。這個(gè)規定說(shuō)明,進(jìn)行數組引用的時(shí)候,[]運算符的左邊并非必須為數組名,而可以是一個(gè)表達式,但這個(gè)表達式的類(lèi)型必須為“指向某類(lèi)型的指針”。顯然10跟(10+20)連地址都不是,因此實(shí)際上他們是非法的,編譯器在這里并沒(méi)有嚴格遵守標準的規定。但如果是:

int a[10], *p = a;

(p+1)[2]這樣就是合法的,因為p+1的結果仍然是一個(gè)指針。

要注意的是,雖然后綴表達式是一個(gè)“指向某類(lèi)型的指針”,但不要被這里所說(shuō)的指針一詞搞混了,上面的規定不能反過(guò)來(lái)使用。還是以上面的例子為例,我們可以p[i]這樣使用p,這是符合上述規定的,但并不能因為指針p能夠以p[i]這種形式使用就認為p是一個(gè)數組,這就錯誤了,不能反過(guò)來(lái)應用上述規則。

        最后說(shuō)一下編譯器對&*的優(yōu)化,對于數組int a[10],如果對其中一個(gè)元素取地址,例如&a[1],這條表達式等價(jià)于&*(a+1),編譯器并不會(huì )先計算*再運算&,而是對&*兩個(gè)運算符進(jìn)行優(yōu)化,把它們同時(shí)去掉,因為兩者的作用是相反的,最后得到計算的是a+1表達式。


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C++中內存泄漏的幾種情況
C語(yǔ)言陷阱和缺陷
C語(yǔ)言缺陷與陷阱(筆記)
c語(yǔ)言
c(計算機語(yǔ)言)
More Effective C++ (M1 -to- M8)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久