c語言對於符號(包含乙個或多個字元)的識別規則:每乙個符號應該包含盡可能多的字元。也就是說,編譯器將程式分解成符號的方法是,從左到右乙個字元乙個字元地讀入,如果該字元可能組成乙個符號,那麼再讀入下乙個字元,判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成部分;如果可能,繼續讀入下乙個字元,重複上述判斷,直到讀入的字元組成的字串已不再可能組成乙個有意義的符號。
注:除了字串與字元常量,符號的中間不能嵌入有空白。
例:a—b 與表示式 a– -b 的含義相同;而與表示式 a- –b的含義是不同的。
再例如:表示式 y = x /* p; /* p指向除數 */
根據注釋的意思,其本意是用x除以p所指向的值,把所得的值賦給y;
而實際上, /* 被編譯器理解為一段注釋的開始,編譯器將不能讀入字元,直到 */ 的出現為止。
因此將上面語句重寫作: y = x / *p 或者 y = x / (*p),更清楚一些。
整數(一般為16位或32位)的儲存空間可以容納多個字元(一般為8位),因此有的c編譯器允許在乙個字元常量中包含多個字元。也就是說,用『yes』代替「yes」不會被編譯器檢測到。後者的含義是「依次包含『y』『e』『s』以及 『\0』的4個連續記憶體單元的首位址」。前者的含義並沒有準確定義。
注:在gcc v2.95和visual c++6.0中採取的做法是,依次用後乙個字元覆蓋前乙個字元,最後得到的整數值即最後乙個字元的整數值;而在borland c++ v5.5和lcc v3.6中採取的做法是,忽略多餘的字元,,最後的整數值即第乙個字元的整數值。
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...
C陷阱與缺陷
1.int num 10 測試一下 num 0 是否 等於 0 num 因為num是首位址 num 0 0 num 2.其實c中只有一維陣列 我們所說的 int a 3 4 只是乙個包含了三個元素 每個元素都是包含了四個整形值的一維陣列 3.int num 10 10 int p num 0 名為n...
C陷阱與缺陷
錯誤分為兩種,具有實質區別。第一種可以被編譯器識別出來,不符合詞法 語法 從技術上說時錯誤的。第二種從技術上說時正確的,計算機的視角看它不具有錯誤。因此,c程式順利通過了編譯,沒有報告任何警告和錯誤資訊,計算機嚴格按照程式 執行,但結果與預期不符。程式設計錯誤實際上反應的是程式與程式設計師對該程式的...