《C陷阱與缺陷》 2

2021-09-01 20:36:29 字數 732 閱讀 7672

4、整數溢位

(1)無符號數(0、+),不可能發生溢位,當它超過範圍時,從0開始重新計數

有符號數(-、0、+),可能發生溢位,並且「溢位」的結果不固定

(2)當乙個無符號數和有符號數相加的時候,有符號數自動轉化為無符號數

(3)判斷溢位

方法一:強制轉換成無符號數

if( (unsigned) a + (unsigned) b > int_max )

fun();

方法二:利用(2)判斷溢位

if( a > int_max -b )

fun();

(5)常用誤區

方法一:無符號數運算結果為無符號數,無符號數始終大於等於0

if( i - j >= 0)假設i和j都為無符號數,則可能引起錯誤,這個式子始終成立,因為無符號數始終大於等於0

方法二:strlen返回的是無符號數

if(strlen(b)-10>=0)這個式子始終成立(牛!!!!!),正確寫法如下:if( strlen(a) >= 10 )

參考見語言中的 整數溢位)

5、getchar異常情況

char c;

while((c = getchar()) != eof)

putchar(c);

getchar函式在一般情況下返回的是標準輸入檔案中的下乙個字元,當沒有輸入時返回eof。

用char來存放getchar的返回值,則會發生截斷,發生各種不可預知的結果。

C陷阱與缺陷(小結2)

語法分析 語句 宣告的語法細節 1.理解函式宣告 任何c變數的宣告都由兩部分組成 型別以及一組類似表示式的宣告符 如 float h 其中型別為float,宣告符為 h 整個宣告表示 h 為乙個函式指標,h所指向函式的返回值為浮點型。由乙個給定型別的變數的宣告得到該型別的型別轉換符 將變數名和宣告部...

C陷阱與缺陷(小結2)

語法分析 語句 宣告的語法細節 1.理解函式宣告 任何c變數的宣告都由兩部分組成 型別以及一組類似表示式的宣告符 如 float h 其中型別為float,宣告符為 h 整個宣告表示 h 為乙個函式指標,h所指向函式的返回值為浮點型。由乙個給定型別的變數的宣告得到該型別的型別轉換符 將變數名和宣告部...

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