C語言中的強制轉換


許久沒有遇到的問題

  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.無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變量的數據長度進行的臨時性轉換,而不改變數據說明時對該變量定義的類型。
3. 一定要檢查強轉之后的數據是否越界。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM