C陷阱與缺陷

2022-07-20 07:51:10 字數 935 閱讀 5836

1.字元與字串

用單引號引起的乙個字元實際上代表乙個整數,整數值對應於該字元在編譯器採用的字符集中的序列值。因此,對於採用ascii字符集的編譯器而言,'a'的含義與0141(八進位制)或者97(十進位制)嚴格一致。

用雙引號引起的字串,代表的卻是乙個指向無名陣列起始字元的指標,該陣列被雙引號之間的字元以及乙個額外的二進位制為零的字元'\0'初始化。

下面的這個語句:

printf("hello world\n");

與char hello = ;

printf(hello);

是等效的。

2.宣告

float f, g;

這個宣告的含義是:當對其求值時,表示式f和g的型別為浮點數型別(float)。因為宣告符與表示式相似,所以我們也可以再宣告符中任意使用括號:

float ((f));

這個宣告的含義是:當對其求值時,((f))的型別為浮點型別,由此可以退知,f也是浮點型別。

同樣的邏輯也適用於函式和指標的型別宣告,例如:

float ff();

這個宣告的含義是:表示式ff()求值結果是乙個浮點數,也就是說,ff是乙個返回值為浮點型別的函式。類似地,

float *pf;

這個宣告的含義是*pf是乙個浮點數,也就是說,pf是乙個指向浮點數的指標。

以上這些形式在宣告中還可以組合起來,就像在表示式中進行組合一樣。因此,

float *g(), (*h)();

表示*g()與(*h)()是浮點表示式。因為()結合優先順序高於*,*g()也就是*(g()):g是乙個函式,該函式的返回值型別為指向浮點數的指標。同理,可以得出h是乙個函式指標,h所指向函式的返回值為浮點型別。

3.運算子

int a,b;

if(a & b) ...

這裡的&是按位與運算子,比如8 & 7 == 0, 8 & 9 == 8

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陷阱與缺陷

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

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...