語法分析
(語句、宣告的語法細節)
1.理解函式宣告
任何c變數的宣告都由兩部分組成:型別以及一組類似表示式的宣告符
如:float (*h)(); 其中型別為float,宣告符為:(*h)()。整個宣告表示:h 為乙個函式指標,h所指向函式的返回值為浮點型。
由乙個給定型別的變數的宣告得到該型別的型別轉換符:將變數名和宣告部分末尾的分號去掉,再將剩餘的部分用乙個括號整個「封裝」起來。
如:float (*h)(); (float (*)()),表示「指向返回值為浮點型的函式的指標」的型別轉換符。
若fp是乙個函式指標,則(*fp)()表示呼叫
fp所指向的函式。
2.運算優先順序
() -> .高於單目運算子高於算術運算子高於移位運算子高於關係運算子高於按位操作高於邏輯操作符高於條件運算子高於賦值運算子高於逗號
結合性:自右向左,其它為自左向右
記住:邏輯運算子低於任意乙個關係運算子;移位運算子低於算術運算子高於關係運算子;在關係運算子中,==和
!=的優先順序最低。
如:*p++,*與++都為單目運算子,即同一優先順序,此時主要考慮結合性—自右向左,所以翻譯為*(p++),即取指標p所指向的物件,然後將p遞增1;而(*p)++是取指標p所指向的物件,然後該物件遞增1。
3.注意作為語句結束標誌的分號
(1) 在if和while語句之後需要緊跟一條語句時,若多了乙個分號,此時原來緊跟if或while語句之後的語句就是一條單獨的語句,與條件判斷部分沒有任何關係。當然,也要注意不能遺漏乙個分號。
(2) 當乙個宣告的結尾緊跟乙個函式定義時,若宣告結尾的分號被省略,編譯器可能會把宣告的型別視作函式的返回值型別
4.switch語句
不要遺漏各個case部分的break
語句;若對某乙個分支情況的處理只要稍作改動,剩餘部分就完全等同於另乙個分支情況下的處理,則可以有意略去乙個break語句(最好在略去break語句的地方加上如下註解:
/*此處沒有break語句*/,來提示程式閱讀者,此處是有意省去乙個break語句)。
5.函式呼叫
在函式呼叫時,即使函式不帶引數,也應包括(空)引數列表。
6.懸掛else引發的問題
記住:else始終與同一對括號內最近的未匹配的if結合。
C陷阱與缺陷(小結2)
語法分析 語句 宣告的語法細節 1.理解函式宣告 任何c變數的宣告都由兩部分組成 型別以及一組類似表示式的宣告符 如 float h 其中型別為float,宣告符為 h 整個宣告表示 h 為乙個函式指標,h所指向函式的返回值為浮點型。由乙個給定型別的變數的宣告得到該型別的型別轉換符 將變數名和宣告部...
《C陷阱與缺陷》 2
4 整數溢位 1 無符號數 0 不可能發生溢位,當它超過範圍時,從0開始重新計數 有符號數 0 可能發生溢位,並且 溢位 的結果不固定 2 當乙個無符號數和有符號數相加的時候,有符號數自動轉化為無符號數 3 判斷溢位 方法一 強制轉換成無符號數 if unsigned a unsigned b in...
c陷阱與缺陷 陷阱
例1 if x y break 這就話的意思就是把y賦值x,判斷x是否為0,實則是在判斷y是否為0 例2 while c c t c n 這句話的意思就是 c t c n 賦值給c,而有 符本身就是不為0的數,所以這就是while 1 的意思。例3 int x 4,p new int p 2 cou...