變數之間型別隱式轉換的坑

2021-10-04 16:43:01 字數 1146 閱讀 2891

先問問自己,當初學c語言時,資料型別的轉換規則還記得嗎。

一)強制轉換。

如下面這種

int a=10;

double b;

b=(double)a;

二)隱式轉換當運算子兩邊的資料型別不一致時,編譯器會主動進行資料型別轉換。轉換的規則是低型別像高型別轉換。隱式轉換方向如下圖所示。

kmp演算法的坑

既然知道了資料型別之間的隱式轉換,那麼下面這個坑就很顯而易見了。

有個同學在寫下面這個kmp演算法時遇到了乙個坑,在while迴圈的時候總是莫名的退出。

那麼到底時什麼問題呢?

strlen這個函式返回值型別為size_t也就是unsigned int

當int型別的變數jisize_t型別變數做比較時,ji會轉換成unsigned int型別。

如果當ji值為-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 函式有返回值是,系統將表達值型別轉換為返回值型別。進行算術運算時,不同型別的數必須轉換...