日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

CSDN技術(shù)中心 第四章 [ ]運(yùn)算符的本質(zhì)

 蔡蔡 2005-09-19

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

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

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

10[a]

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

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

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

int a[10], *p = a;

(p+1)[2]這樣就是合法的,因?yàn)閜+1的結(jié)果仍然是一個(gè)指針。

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

        最后說(shuō)一下編譯器對(duì)&*的優(yōu)化,對(duì)于數(shù)組int a[10],如果對(duì)其中一個(gè)元素取地址,例如&a[1],這條表達(dá)式等價(jià)于&*(a+1),編譯器并不會(huì)先計(jì)算*再運(yùn)算&,而是對(duì)&*兩個(gè)運(yùn)算符進(jìn)行優(yōu)化,把它們同時(shí)去掉,因?yàn)閮烧叩淖饔檬窍喾吹模詈蟮玫接?jì)算的是a+1表達(dá)式。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多