C語言中的強制轉換
阿新 • • 發佈:2020-08-06
許久沒有遇到的問題
C語言真是博大精深,越使用它,就越發感覺到它的威力和恐怖,最近在做演算法的時候,遇到了一個強轉的錯誤,把人折騰的夠受,這次要好好梳理一下了,希望下次不能再犯此類的問題。
強制轉換
強轉是一個code中常用的做法,但是稍不留神,就會陷入演算法失靈的境地,面對幾十萬行的程式碼,找到其中一個性能的問題,這種是非常考驗人的。弄不好的會把人折騰的“飄飄欲仙”--頭腦發脹,兩眼發黑的那種。
強轉的一個例子
下面一個例子說明了強轉中哪些寫法是不對的:
#include <stdio.h> int main() {double testa = 0.34545,testb = 0.001,testf = 0.0; short testd = 1234; short *teste = malloc(10*sizeof(short)); double testc = testd; teste[1] = 4; // this code is right testa = testb - (double)teste[1]; // it's wrong way testf = testb - teste[1]; printf("one teste:%lf teste:%d \n\r",(double)teste[1],teste[1]); printf("two testf:%f \n\r",testf); printf("three teste:%f testa:%lf \n\r",testf,testa); free(teste); return 0; }
強轉的注意事項
1.型別bai說明符和表示式都必須加括號。
如把(int)(x+y)寫成dao(int)x+y則成了把x轉換成int型之後再與y相加了。
2.無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變數的資料長度進行的臨時性轉換,而不改變資料說明時對該變數定義的型別。