卷首語
對於一些複雜的聲明和表達式,雖然不常遇到,我們一般也不會寫一些看不懂優先級的表達式,但大致記憶一下運算符的優先級,確實有助於我們編程,而通過分類之後,看似繁雜的運算符優先級表,就變得很容易記住。
重要性,舉例
*p() 讀作什麼?是(*p)()呢,還是*(p())
*p++讀作什麼?是(*p)++呢,還是*(p++)
x >> 4 + a 讀作什麼?是(x>>4)+a,還是x >> (4+a)
再看看下面這個,是否暈了呢?
void (* ( *pf ) (int sig, void (*func)(int)))(int)
亦或者,下面是否有bug?
while (c = getchar() !=EOF)
putc(c, out);
這些都是常見的寫法,並且很多人不會給你用()排出優先級,所以適當記憶優先級表,是有必要的。
優先級表
經過分類的運算符優先級表,記憶方式一目瞭然。同級之間按結合律,從左至右,或者從右至左。
記憶方法
- 右結合律,只有3組:單目運算符、三目運算符、賦值運算符。
- 優先級A, 最高的,4個非運算符(), [],->,.的,這個必須記住,常常用到。其中()既可以用來提升優先級,又可以作為函數()使用。
- 優先級B, 單目運算符是所有運算符中優先級最高的,僅次於4個非運算符
- 優先級C,所有雙目運算符優先級,均低於單目運算符,而雙目運算符中的算術運算符(* / % + -)優先級最高,也是我們最熟悉的
- 優先級最低:三目運算符、賦值運算符=,以及逗號運算符,依次為最低優先級。
重點記憶
之所以這裡提出來,是因為,如果這幾個都不記住,犯錯概率非常大。
- 重點記憶:4個非運算符(), [],->,.的優先級最高,其次是單目運算符
- 重點記憶: * 是乘號,也是*指針解引用運算符,但無論如何,其優先級低於 () [] -> .
- 重點記憶: =賦值運算符,是最低優先級(在?:和逗號之外)。
相關文章:
卷尾語
歡迎糾錯,討論。
關注 ,普及計算機知識,講解C/彙編/C++/JAVA/Phyton等編程語言。
做創客,愛編程。
喜歡的給個關注,需要的可以私信,送資料,每天都會抽空回覆。
閱讀更多 阿迷創客 的文章