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