目錄
一、前言
二、==不同于=
案例1.錯把==寫成=
案例2.錯把=寫成==
三、詞法分析中的貪心法
案例1.
四、整形常量
五、字符與字串
六、練習

一、前言

二、==不同于=
案例1.錯把==寫成=
while(c=''||c=='a'||c=='b')
{c=getc(f);}
分析:由于‘ ’ASCLL碼值不為0,程式可能會陷入死
建議:好的習慣是寫成 ‘ ’==c 這樣可以避免我們的失誤
反思:當我們確實需要寫出類似 “if(x=y)” 這樣的陳述句時,為了避免報錯,也為了使得程式目的一目了然,應該寫成 "if((x=y)!=0) "
案例2.錯把=寫成==
if(field==open(x,y)<0)
分析:==的回傳值為0或1,使得if陳述句失去作用,也使得field失去了儲存回傳作用
(同理注意& 和 | 與&& 和 ||)
三、詞法分析中的貪心法
思考:如當編譯器讀入一個符號'/'后又讀入一個符號'',編譯器如何看待第二次輸入的符號'*',是分開處理,還是看成‘/*’
對此編譯器采用貪心法(也叫大嘴法)進行處理
貪心法:基本原則一個符號應該盡可能包含更多的字符,即在輸入一個可能成為符號的字符后繼續讀入下一個字符,判斷兩個字符組成的字串能否組成一個符號,重復上述程序,直至不能組成一個可能的符號
注意符號之間不能留有空白,如==與= =不同
案例1.
int main()
{
int a = 10; int b = 5;
int *p = &a;
int c = b/*p;
return 0;
}
/與*根據貪心法,組合成 '/*' 后面的內容都被認作是注釋的內容,直到輸入*/結束
四、整形常量
如 ‘’010”這樣的形式會被認為是八進制,有時為了結構對齊而輸入資料時注意

五、字符與字串
總結:1.單引號內的字符實際上表示一個整數,其值對照ASCLL碼表
2.雙引號內的字串,表示的是一個指向無名陣列的指標,該陣列被雙引號間的字符和額 外的0賦值(所以我們也就可以用字符指標實作對字串內內字符的一一訪問
【因此“yes”被認為是一個陣列依次存入‘y’‘e’‘s’‘0’ 而‘yes’則被認為是一個整型值,如果將‘yes’放入char n內時發生從int到char的截斷】
(注:因為一個整形大小在2~4位元組,所以可以放入多個字符)
六、練習
例1:a+++++b的含義什么
分析:根據貪心法,++組合后再一次++最后以為((a++)++))+b
例2:為什么n-->0的結果是n-- >0而不是n- ->0?
分析:同樣根據貪心演算法,盡可能的多組合
上述內容為作者對重點的總結,難免殘缺,想了解完整內容,還請看原著,日更ing……
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/297342.html
標籤:其他
