C語言學(xué)習(xí)的一些陷阱
在C語言中,符號==是作為賦值運算,符號==是作為比較的。一般而言,賦值運算比比較運算出現(xiàn)得更頻繁,因此字符較少的符號=就被賦予了更常用的含義——賦值操作。賦值操作在平常更廣泛被我們使用,這就導(dǎo)致了一個潛在的問題,程序員本意要做比較運算,卻寫成了賦值運算。
2、程序中的“/*”
當C編譯器讀入一個字符“/”之后又跟了一個字符“*”,那么編譯器就必須做出判斷:是將其作為兩個分別的字符對待,還是合起來作為一個符號對待。不同的編譯器對于“/*”會產(chǎn)生不同的影響。
例:要求寫一個測試程序,無論是對允許嵌套注釋的編譯器,還是對不允許嵌套注釋的編譯器,該程序都能正常通過編譯,但是這兩種情況下程序執(zhí)行的結(jié)果卻不相同。
解:/*/*/0*/**/1這一行表達式,如果編譯器允許嵌套注釋的話,即可理解為:/* /* /0 */ * */ 1。兩個/*和兩個*/正好匹配,所以上式的值就是1.如果不允許嵌套注釋的話,注釋中的/*將被忽略。因此上面的表達式可以理解為:/* / */ 0* /* */ 1,他的值就是0*1。
3、字符和字符串
用單引號引起的一個字符實際上表示一個整數(shù),例如‘a(chǎn)’的含義和0141(八進制)或者97(十進制)嚴格一致。
用雙引號一起的是字符串,表示的是一個數(shù)組起始字符的指針,該數(shù)組末尾是以字符‘