c語言如何進行強制型別轉換

2023-01-04 14:01:44

在c語言中,可以通過「(type_name) expression」語句來進行強制型別轉換,引數「type_name」表示新型別名稱,例如「(float)100」就是將int型別的數值100轉換為float型別。強制型別轉換是程式設計師明確提出的、需要通過特定格式的程式碼來指明的一種型別轉換;在程式設計時,有需要型別轉換的時候都用上強制型別轉換運運算元,是一種良好的程式設計習慣。

本教學操作環境:windows7系統、c99版本、Dell G3電腦。

資料型別轉換就是將資料(變數、數值、表示式的結果等)從一種型別轉換為另一種型別。

c語言有兩種資料型別方式:

  • 自動型別轉換:就是編譯器默默地、隱式地、偷偷地進行的資料型別轉換,這種轉換不需要程式設計師干預,會自動發生。

  • 強制型別轉換

下面我們就詳細瞭解一下c語言的強制型別轉換。

強制型別轉換

自動型別轉換是編譯器根據程式碼的上下文環境自行判斷的結果,有時候並不是那麼「智慧」,不能滿足所有的需求。如果需要,程式設計師也可以自己在程式碼中明確地提出要進行型別轉換,這稱為強制型別轉換。

自動型別轉換是編譯器默默地、隱式地進行的一種型別轉換,不需要在程式碼中體現出來;強制型別轉換是程式設計師明確提出的、需要通過特定格式的程式碼來指明的一種型別轉換。換句話說,自動型別轉換不需要程式設計師干預,強制型別轉換必須有程式設計師干預。

強制型別轉換的格式為:

(type_name) expression
登入後複製
  • type_name為新型別名稱

  • expression為表示式

例如:

(float) a;  //將變數 a 轉換為 float 型別
(int)(x+y);  //把表示式 x+y 的結果轉換為 int 整型
(float) 100;  //將數值 100(預設為int型別)轉換為 float 型別
登入後複製

請看下面的範例,使用強制型別轉換運運算元把一個整數變數除以另一個整數變數,得到一個浮點數:

#include <stdio.h>
 
int main()
{
   int sum = 17, count = 5;
   double mean;
 
   mean = (double) sum / count;
   printf("Value of mean : %f\n", mean );
 
}
登入後複製

1.png

這裡要注意的是強制型別轉換運運算元的優先順序大於除法,因此 sum 的值首先被轉換為 double 型,然後除以 count,得到一個型別為 double 的值。

型別轉換可以是隱式的,由編譯器自動執行,也可以是顯式的,通過使用強制型別轉換運運算元來指定。在程式設計時,有需要型別轉換的時候都用上強制型別轉換運運算元,是一種良好的程式設計習慣。

型別轉換只是臨時性的

無論是自動型別轉換還是強制型別轉換,都只是為了本次運算而進行的臨時性轉換,轉換的結果也會儲存到臨時的記憶體空間,不會改變資料本來的型別或者值。請看下面的例子:

#include <stdio.h>
int main(){
    double total = 400.8;  //總價
    int count = 5;  //數目
    double unit;  //單價
    int total_int = (int)total;
    unit = total / count;
    printf("total=%lf, total_int=%d, unit=%lf\n", total, total_int, unit);
    return 0;
}
登入後複製

2.png

注意看第 6 行程式碼,total 變數被轉換成了 int 型別才賦值給 total_int 變數,而這種轉換並未影響 total 變數本身的型別和值。如果 total 的值變了,那麼 total 的輸出結果將變為 400.000000;如果 total 的型別變了,那麼 unit 的輸出結果將變為 80.000000。

擴充套件知識:常用的算術轉換

常用的算術轉換是隱式地把值強制轉換為相同的型別。編譯器首先執行整數提升,如果運算元型別不同,則它們會被轉換為下列層次中出現的最高層次的型別:

3.png

常用的算術轉換不適用於賦值運運算元、邏輯運運算元 && 和 ||。讓我們看看下面的範例來理解這個概念:

#include <stdio.h>
 
int main()
{
   int  i = 17;
   char c = 'c'; /* ascii 值是 99 */
   float sum;
 
   sum = i + c;
   printf("Value of sum : %f\n", sum );
 
}
登入後複製

當上面的程式碼被編譯和執行時,它會產生下列結果:

Value of sum : 116.000000
登入後複製

在這裡,c 首先被轉換為整數,但是由於最後的值是 float 型的,所以會應用常用的算術轉換,編譯器會把 i 和 c 轉換為浮點型,並把它們相加得到一個浮點數。

【相關推薦:C語言視訊教學、】

以上就是c語言如何進行強制型別轉換的詳細內容,更多請關注TW511.COM其它相關文章!