一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

細(xì)說(shuō)c語(yǔ)言的優(yōu)先級(jí)

 敬而遠(yuǎn) 2012-02-03
Table
0. 為什么要掌握優(yōu)先級(jí)
1. 優(yōu)先級(jí)
1.1 優(yōu)先級(jí)圖表
1.2 運(yùn)算符實(shí)例
1.3 優(yōu)先級(jí)順口溜
2. 結(jié)合性
3. 參考資料
Link:http://blog./space. ... blog&id=2880933
        寫代碼的時(shí)候,常會(huì)翻看的一個(gè)表就是“c語(yǔ)言運(yùn)算符優(yōu)先級(jí)表”。c的運(yùn)算符優(yōu)先級(jí)常常很讓人頭疼。其實(shí),在大學(xué)里學(xué)習(xí)c的時(shí)候,老師告訴大家這個(gè)不用一定背下來(lái),用的時(shí)候可以找書,或者加小括號(hào)就可以了。我聽了,但是后來(lái)發(fā)現(xiàn)錯(cuò)了。很多人都聽了,但不是每個(gè)人都發(fā)現(xiàn)這是錯(cuò)的。以至于有人覺(jué)得把優(yōu)先級(jí)背下來(lái)是“沒(méi)事閑的”(http://zhidao.baidu.com/question/155120432.html?an=0&si=1)。

0. 為什么要掌握優(yōu)先級(jí)
        想想這兩個(gè)問(wèn)題:
                a. 讀別人的代碼,遇到優(yōu)先級(jí)問(wèn)題看不懂,怎么辦?
                b. 一堆的括號(hào),美觀嗎?
                本想貼一張畫來(lái)裝飾墻壁,卻用了一堆紙來(lái)固定! 
                有人說(shuō)代碼寫多了,自然就會(huì)了。這個(gè)是很寬泛的說(shuō)法。看你寫的代碼的水準(zhǔn),有些東西可能你一直都接觸不到,何談熟練。有些東西一定要梳理,總結(jié)。

1. 優(yōu)先級(jí)

1.1 優(yōu)先級(jí)圖表


        優(yōu)先級(jí)最高者不是真正意義上的運(yùn)算符,包括:數(shù)組下標(biāo),函數(shù)調(diào)用,結(jié)構(gòu)體成員選擇符。
        單目運(yùn)算符的優(yōu)先級(jí)次之。(! ~ ++ -- - (type) * & sizeof)
        然后是雙目運(yùn)算符。雙目運(yùn)算符里, 算數(shù)運(yùn)算符(* / % + -)優(yōu)先級(jí)最高, 移位(<< >>)次之, 關(guān)系運(yùn)算符(< <= > >= != ==)再次之, 接著是位運(yùn)算符(& ^ | ),邏輯運(yùn)算符(&& ||) 條件運(yùn)算符(?: 三目),賦值運(yùn)算符(= ...)。
        任何一個(gè)邏輯運(yùn)算符的優(yōu)先級(jí)低于任何一個(gè)關(guān)系運(yùn)算符。
        移位運(yùn)算符的優(yōu)先級(jí)比算數(shù)運(yùn)算符要低,但是比關(guān)系運(yùn)算符要高。

1.2 運(yùn)算符實(shí)例
        a. while (c = getc(in) != EOF)
                putc(c, out)
                循環(huán)的意思是復(fù)制一個(gè)文件到另一個(gè)文件。但是由于!=的優(yōu)先級(jí)比賦值運(yùn)算符的優(yōu)先級(jí)高,所以c被賦予了getc()的返回值與EOF比較后的布爾值,結(jié)果向out中寫入了一堆1.
        b. 解釋下面幾個(gè)聲明
  1.         char *p[]; 
  2.         char (*p)[];
  3.         int *fp();
  4.         int (*fp)();
  5.        
復(fù)制代碼
char *p[]
                常常被錯(cuò)誤的理解為指向字符數(shù)組的指針。
                正確的是p一個(gè)數(shù)組,里面元素是指向字符的指針類型。
        char (*p)[]
                p是指向指向字符數(shù)組的指針。
        int *fp()
                常常錯(cuò)誤理解為函數(shù)指針,該函數(shù)返回int類型。
                正確的是fp是一個(gè)函數(shù),他返回一個(gè)執(zhí)行int的指針。
        int (*fp)()
                fp是函數(shù)指針,該函數(shù)返回int類型。
        
        c. 解釋下面的表達(dá)式
  1.         *p.f;
  2.         val & mask != 0;
  3.         max = val1 > val2 ? val1 : val2;
  4.        
復(fù)制代碼
*p.f
                對(duì)p去f偏移,作為指針,然后進(jìn)行解引用。相當(dāng)與*(p.f),因?yàn)?的優(yōu)先級(jí)高與*。比較(*p).f。
        val & mask != 0
                相當(dāng)與val & (mask != 0).
        max = val1 > val2 ? val1 : val2
                相當(dāng)與 max = (val1 > val2 ? val1 :val2).
        
        d. 一個(gè)復(fù)雜的聲明
  1.         char *(* c[10])(int **p);
  2.        
復(fù)制代碼
1. 有兩個(gè)小括號(hào),小括號(hào)的結(jié)合行是自左向右,所以我們先關(guān)注第一個(gè)小括號(hào),簡(jiǎn)化聲明(*c[10])();
                c是一個(gè)數(shù)組,里面放10指針,后面緊跟這一個(gè)括號(hào),所以這些指針是函數(shù)指針。
        2. 關(guān)注第二個(gè)括號(hào),(int **p)
                顯然p是函數(shù)的參數(shù),它是個(gè)指向指針的指針。
        3. 這看最前面的*
                char *說(shuō)明該函數(shù)的返回值是一個(gè)指向字符的指針。
        4. 這個(gè)聲明的意思就是:c是一個(gè)數(shù)組,里面有10個(gè)函數(shù)指針,指向的函數(shù)返回指針,指向字符,函數(shù)的參數(shù)是指向int類型指針的指針。

1.3 優(yōu)先級(jí)順口溜
        醋壇酸味灌
        味落跳福豆

        共44個(gè)運(yùn)算符

        醋-初等,4個(gè): ( ) [ ] -> 指向結(jié)構(gòu)體成員 . 結(jié)構(gòu)體成員
        壇-單目,9個(gè): ! ~ ++ -- -負(fù)號(hào) (類型) *指針 &取地址 sizeof長(zhǎng)度
        酸-算術(shù),5個(gè): * / % + -減
        味-位移,2個(gè): << >>
        灌-關(guān)系,6個(gè): < <= > >= == 等于 != 不等于
        味-位邏,3個(gè): & 按位與 ^ 按位異或 | 按位或
        落-邏輯,2個(gè): && 邏輯與 || 邏輯或
        跳-條件,1個(gè),三目: ? :
        福-賦值,11個(gè): = += -= *= /= %= >>= <<= &= ^= |=
        豆-逗號(hào),1個(gè): , 

2. 結(jié)合性
        在標(biāo)準(zhǔn)C語(yǔ)言的文檔里,對(duì)操作符的結(jié)合性并沒(méi)有作出非常清楚的解釋。一個(gè)滿分的回答是:它是仲裁者,在幾個(gè)操作符具有相同的優(yōu)先級(jí)時(shí)決定先執(zhí)行哪一個(gè)。
        看例子:
  1.         int a, b = 1, c = 2;
  2.         a = b = c;
  3.        
復(fù)制代碼
這個(gè)表達(dá)式只有賦值符,這樣優(yōu)先級(jí)就無(wú)法幫助我們呢決定哪個(gè)操作先執(zhí)行。如果a = b先執(zhí)行,然后 b = c執(zhí)行。那么a最終取1。如果b = c先執(zhí)行, a = b后執(zhí)行,那么a最終取2。到底哪一個(gè)先執(zhí)行?看結(jié)合性,復(fù)制的結(jié)合性是右至左,所以b = c,然后a = b。
        同級(jí)的操作符,結(jié)合性相同。如果在計(jì)算表達(dá)式的值時(shí)候需要考慮結(jié)合性,那么最好把這個(gè)表達(dá)式一分為二。

3. 參考資料
        《c Traps and Pitfalls》 Andrew Koenig著, ISBN 978-7-115-17179-5
        《c 專家編程》 Peter Van Der Linden 著, ISBN 978-7-115-17180-1
        順口溜 http://blog.sina.com.cn/s/blog_4e64e2290100be0z.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(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)論公約

    類似文章 更多

    日韩一区二区三区高清在| 最新国产欧美精品91| 男生和女生哪个更好色| 黄片免费在线观看日韩| 精品熟女少妇av免费久久野外| 一区二区三区亚洲国产| 91国自产精品中文字幕亚洲| 丝袜视频日本成人午夜视频| 亚洲欧美一二区日韩高清在线| 婷婷基地五月激情五月| 国语对白刺激高潮在线视频| 日韩人妻有码一区二区| 欧美亚洲另类久久久精品| 国产午夜精品美女露脸视频| 欧美精品亚洲精品日韩精品| 久久精品亚洲精品国产欧美| 日韩欧美一区二区不卡视频| 一级片黄色一区二区三区| 俄罗斯胖女人性生活视频| 91国内视频一区二区三区| 久久精品国产亚洲av麻豆尤物 | 99国产高清不卡视频| 成人日韩视频中文字幕| 九九热视频经典在线观看| 亚洲av又爽又色又色| 最新日韩精品一推荐日韩精品| 日本加勒比中文在线观看| 国产91麻豆精品成人区| 丰满的人妻一区二区三区| 国产午夜福利在线观看精品| 高潮少妇高潮久久精品99| 亚洲中文字幕在线综合视频| 在线免费观看黄色美女| 精品一区二区三区人妻视频| 欧美丰满大屁股一区二区三区| 国产日韩精品激情在线观看| 日木乱偷人妻中文字幕在线| 午夜免费精品视频在线看| 久久精品亚洲欧美日韩| 亚洲淫片一区二区三区| 色婷婷视频国产一区视频|