c陷阱與缺陷 陷阱

2021-07-06 07:41:17 字數 1153 閱讀 2530

例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; cout《這個涉及到編譯器的編譯過程,編譯原理的問題:編譯器是利用貪心演算法來編譯的,所以會識別成/*

例4:注意010和10 的區別010是八進位制寫法,一般也不會這樣寫。

例5: 』『和「」的差別,』『是單個字元,「」是字串的表示。

1.函式申明:

例子:(*(void(*)())0)();//這個函式申明

這個例子涉及函式指標和指標函式 ,看一下例子:float *a(),(*b)();這是兩個定義呢,a是乙個函式,返回值是乙個float型指標,b是乙個指標,返回值是float。這是因為()的優先順序高於*的原因。

如何去呼叫乙個指標函式呢,就是申明(*b)();也可以簡化成b();

所以最初大那個例子可以解釋了:

(void(*)())0=p是乙個將常數0強制轉化成返回值為void型別的函式指標p,那麼就是(*p)()的意思,呼叫函式指標的意思。

2.運算子優先順序:單目大於多目運算子,自左而右要高於自右向左。

這個需要記住的最重要的兩點:1任何乙個邏輯運算子的優先順序低於任何乙個關係運算子 2.移位運算子的優先順序比算術運算子的要低,但比關係運算子要高。

3.結束識別符號:

if(n<3)  return //;(少了乙個分號結束符)

i=3;

實際上就會變成if(n<3) return  i=3;這樣一句話。

1.看一段**:

char *r,*malloc();

r=malloc(strlen(s)+strlen(t));

strcpy(r,s);

strcat(r,t);

這個是為r申請一段記憶體,但是忽略了申請不成功的情況。所以要修改考慮申請不成功的地方。

2.整數溢位:

如何判斷兩個數之和是否為整數溢位呢??結果是這樣的,將int裝換為unsigned int ,然後將這兩個數相加判斷是否超出了最後的整數。

C缺陷與陷阱 詞法陷阱

從較低的層面考察,程式是由符號 token 序列組成的,將程式分解成符號的過程,稱為詞法分析。這節主要分析在程式被詞法分析器分解成各個符號的過程中可能出現的問題。編譯器中負責將程式分解成乙個乙個符號的部分,一般稱之為詞法分析器。c語言中符號之間的空白 包括空格符,製表符和換行符 將被忽略。術語符號 ...

c陷阱與缺陷 語法「陷阱

語法 陷阱 語法是在詞法的基礎上延伸,它教怎樣組合成宣告,表示式,語句和程式 理解函式宣告 任何c變數宣告都是由 型別 一組類似表示式的宣告符 float f 乙個簡單的變數宣告 float f 這是乙個函式宣告,其返回值 float型別的函式 float f 這是乙個指向float型別的指標 fl...

C陷阱與缺陷

c語言對於符號 包含乙個或多個字元 的識別規則 每乙個符號應該包含盡可能多的字元。也就是說,編譯器將程式分解成符號的方法是,從左到右乙個字元乙個字元地讀入,如果該字元可能組成乙個符號,那麼再讀入下乙個字元,判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成部分 如果可能,繼續讀入下乙個字元,重...