技巧:看一次記住,複雜的C語言運算符優先級

卷首語

對於一些複雜的聲明和表達式,雖然不常遇到,我們一般也不會寫一些看不懂優先級的表達式,但大致記憶一下運算符的優先級,確實有助於我們編程,而通過分類之後,看似繁雜的運算符優先級表,就變得很容易記住。

技巧:看一次記住,複雜的C語言運算符優先級

重要性,舉例

*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);

這些都是常見的寫法,並且很多人不會給你用()排出優先級,所以適當記憶優先級表,是有必要的。

優先級表

經過分類的運算符優先級表,記憶方式一目瞭然。同級之間按結合律,從左至右,或者從右至左。

技巧:看一次記住,複雜的C語言運算符優先級

分類後的運算符優先級

記憶方法

  1. 右結合律,只有3組:單目運算符、三目運算符、賦值運算符。
  2. 優先級A, 最高的,4個非運算符(), [],->,.的,這個必須記住,常常用到。其中()既可以用來提升優先級,又可以作為函數()使用。
  3. 優先級B, 單目運算符是所有運算符中優先級最高的,僅次於4個非運算符
  4. 優先級C,所有雙目運算符優先級,均低於單目運算符,而雙目運算符中的算術運算符(* / % + -)優先級最高,也是我們最熟悉的
  5. 優先級最低:三目運算符、賦值運算符=,以及逗號運算符,依次為最低優先級。
技巧:看一次記住,複雜的C語言運算符優先級

運算符優先級,記住大類,就記住了一大半

重點記憶

之所以這裡提出來,是因為,如果這幾個都不記住,犯錯概率非常大。

  1. 重點記憶:4個非運算符(), [],->,.的優先級最高,其次是單目運算符
  2. 重點記憶: * 是乘號,也是*指針解引用運算符,但無論如何,其優先級低於 () [] -> .
  3. 重點記憶: =賦值運算符,是最低優先級(在?:和逗號之外)。

相關文章:

卷尾語

歡迎糾錯,討論。

關注 ,普及計算機知識,講解C/彙編/C++/JAVA/Phyton等編程語言。

做創客,愛編程。

喜歡的給個關注,需要的可以私信,送資料,每天都會抽空回覆。


分享到:


相關文章: