本文為個人讀書筆記,僅供記錄學習過程中遇到的日後需要留意的問題,如有相關版權問題請及時通知作者。
注釋編譯器會用空格代替注釋部分
塊注釋不能巢狀
/與*之間沒有空格,就會被當做注釋的開始
注釋的基本要求
全域性資料必須要加注釋
注釋是對**的提示,不是文件
注釋**段時應注重為何做,而不是怎麼做
數值的單位一定要注釋
接續符和轉義符
\ 反斜槓 表示斷行。編譯器會將反斜槓剔除,跟在反斜槓後面的字元自動接續到前一行。反斜槓之後、下一行之前不能有空格
\ 反斜槓還表示轉義字元。
單引號雙引號
單引號引起的是字元常量,雙引號引起的是字串常量
邏輯運算子
注意當邏輯算式已經確定值之後,將不再執行其他的運算。
位運算子
按位亦或可以實現不用第三個臨時變數交換兩個變數的值,不推薦。
左移右移
左移:左運算數的各二進位制位向左移動右運算數字,高位丟棄,低位補0
右移:做運算數的各二進位制位向右移動右運算數字。對於有符號數,右移時符號位移動。正數時,高位補0;負數時,符號位為1,最高位補0或補1取決於編譯系統規定。
+號優先順序高於左移右移。
左移右移的位數不能大於資料的長度,不能小於0
自加自減
int i=3;
(++i)+(++i)+(++i);
vc的結果是16。某些編譯器結果是18 。
後自加:遇到,逗號 ;分好認為計算單位已結束,會自加。
貪心法:c語言規定,沒乙個符號應該包含盡可能多的字元。編譯器將程式分解成符號的方法是,從左到右乙個乙個字元的讀入,如果該字元可能組成乙個符號,那麼再讀入下乙個字元,判斷已經讀入的兩個字元組成的字串是否可能使乙個符號的組成部分;如果可能,繼續讀入下乙個字元,重複判斷,直到讀入的字元組成的字串已不再可能組成乙個有意義的符號。這個處理的策略被稱為「貪心法」。除了字串與字元常量,符號的中間不能嵌有空白(空格、製表符、換行符等)
優先順序優先順序
運算子名稱或含義
1[ ]
陣列下標
()圓括號
.成員選擇 物件
->
成員選擇 指標2-
負號(型別)
強制型別轉換
++,--
自增自減*取值
&取位址
!邏輯非
~按位取反
sizeof
長度運算3/
除*乘%
取餘、模除
4+ -加減5
<<,>>
左移右移
6>,>=,<,<=
大於,大於等於,小於,小於等於
7==,!=
等於不等於8&
按位與9
^按位異或10|
按位或11
&&邏輯與
12||
邏輯或13
?:條件運算子
14=,/=,*=,%=,+=,-=,<<=,>>=,&=,^=,|=
賦值,除后賦值,乘後賦值,取餘後賦值,加後賦值,減後賦值,左移後賦值,右移後賦值,按位與後賦值,按位異或後賦值,按位或後賦值15,
逗號運算子
容易出錯的問題
優先順序表示式
錯誤結果
實際結果
.高於*
*p.f
p所指物件的字段
f(*p).f
對p取f偏移,作為指標*
(p.f)
[ ]高於*
int *ap[ ]
ap是指向int陣列的指標
int (*ap)[ ]
ap是元素為int指標的陣列
int *(ap[ ])
函式()高於*
int *fp()
fp是個函式指標,所指函式返回int
int(*fp)()
fp是個函式,返回int*
int *(fp())
==和!=高於位運算
(val&mask!=0)
(val&mask)!0
val&(mask!=0)
==和!=高於賦值符
c=getchar()!=eof
(c=getchar())!=eof
c=(getchar()!=eof)
算術運算子高於位移
msb<<4+lsb
(msb<<4)+lsb
msb<<(4+lsb)
逗號優先順序最低
i=1,2
i=(1,2)
(i=1),2
C語言深度解剖(第二章 符號讀書筆記)
2.1 注釋符號 c語言注釋有兩種 和 其中 編譯器剔除注釋 時會將 變為空格。特別注意 這種注釋不能巢狀,總是與離它最近的 匹配 2.2 連續符和轉義符 c語言裡以反斜槓 表示斷行。編譯器會將反斜槓剔除掉,跟在反斜槓後面的字元自動接續到前一行。但是注意 反斜槓之後不能有空格,反斜槓的下一行之前也不...
C語言深度剖析學習筆記 符號
1.預處理時,編譯器會使用空格替換,所以 in t i 0 是錯誤的,gcc e 編譯後變成 in t i 0 2.y x p 不等於 y x p,因為編譯器解析語法的時候,是從左到右,找最長的有意義的單元,對於第二段 編譯器找到x後繼續往後找,判斷 x 是否是合法的識別符號或者關鍵字,發現不是,於...
《c語言深度剖析》讀書筆記(二)符號
本文是自己讀書的時候一些關於該書的重點及感悟 目錄 1 注釋符號 2 接續符和轉義符 3 單引號和雙引號 4 邏輯運算子 5 位運算子 6 花括號 7 操作符 8 c語言除法 9 符號優先順序 1 c 語言裡可以有兩種注釋方式 和 編譯器在編譯程式時的確會將注釋剔除,但不是簡單的剔除,而是用空格代替...