先問問自己,當初學c語言時,資料型別的轉換規則還記得嗎。
一)強制轉換。
如下面這種
int a=10;
double b;
b=(double)a;
二)隱式轉換當運算子兩邊的資料型別不一致時,編譯器會主動進行資料型別轉換。轉換的規則是低型別像高型別轉換。隱式轉換方向如下圖所示。
kmp演算法的坑
既然知道了資料型別之間的隱式轉換,那麼下面這個坑就很顯而易見了。
有個同學在寫下面這個kmp演算法時遇到了乙個坑,在while迴圈的時候總是莫名的退出。
那麼到底時什麼問題呢?
strlen
這個函式返回值型別為size_t
也就是unsigned int
。
當int型別的變數j
、i
與size_t
型別變數做比較時,j
、i
會轉換成unsigned int
型別。
如果當j
、i
值為-1
時,轉成unsigned int
後就變成了2的32次方-1。
#include
#include
#define max 1000005
int nextval[max]
;char s[max]
, t[max]
;void
getnextval
(char t)
else k = nextval[k];}
}int
main()
else}if
(j >=
strlen
(t))
else
printf
("0");
return0;
}
顯式型別轉換 隱式型別轉換 變數作用域
妙味課堂 1 顯式型別轉換 強制型別轉換 parseint可以把字串轉化為數字 或者說從字串中提取數字 12.6 12 12px34 12 abc nan not a number 從左到右是數字取出,碰到不是數字的停止 parsefloat把字串轉化為小數 求和器 注意 1 nan和任何東西相加還...
隱式型別轉換
c 本身對內建型別定義了各種隱式的型別轉換,這種內建的型別轉換在可能導致精度 丟失的情況下編譯器會發出警告,但當我們定義自己的型別時,提供各種隱式轉換往往 是弊大於利的 至少在我編寫過的 中很少用到 隱式的型別轉換可分為 其它型別到本型別,本型別到其它型別兩種.第一種通過單變數 可呼叫之建構函式進行...
隱式型別轉換
c語言中有以下四種情況會進行隱式轉換 1 算術運算子中,低型別轉換為高型別。2 賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值。3 函式呼叫傳遞引數時,系統將實參轉換為形參的型別後,賦給形參。4 函式有返回值是,系統將表達值型別轉換為返回值型別。進行算術運算時,不同型別的數必須轉換...