第4課 類型轉換

·C語言中的數據類型能夠進行轉換
1.強制類型轉換
2.隱式類型轉換程序員

clipboard.png
·強制類型轉換的語法
-(Type)var_name;
-(Type)value安全

·強制類型轉換的結果
-目標類型可以容納的目標值:結果不變
-目標類型不能容納的目標值:結果將產生截斷(比方說int類型轉化爲char類型,捨棄高3字節,留下低1字節)函數

·浮點數的強制類型轉換的結果保留整數部分,去掉小數部分。int a = (int)3.1415的結果爲3;spa

注意:
不是全部的強制類型轉換都能成功,當不能進行強制類型轉換時,編譯器將報錯。3d

例子4-1:code

include"stdio.h"

struct TS
{blog

int i;
int j;

};
struct TS ts;
int main()
{ip

short s = 0x1122;
char c = (char)s;  //22
int i = (int)s;    
int j = (int)3.1415;
unsigned int p = (unsigned int)&ts; //結構體地址,不會報錯
//long l = (long)ts;    //結構體類型不能轉化爲基本類型,C語言中是不容許的
//ts = (struct TS)l;    //基本類型也不能強制類型轉化爲結構體類型
printf("s = %x\n", s);
printf("c = %x\n", c);
printf("i = %x\n", i);
printf("j = %x\n", j);
printf("p = %x\n", p);
printf("ts = %p\n", &ts);

return 0;

}
輸出結果:
s = 1122
c = 22
i = 1122
j = 3
p = efa190
&ts = 00EFA190編譯器

·隱式類型轉換
-編譯器主動進行的類型轉換it

clipboard.png
注意:
低類型到高類型的隱式類型轉換是安全的,不會產生截斷(char →)
高類型到低類型的隱式類型轉換是不安全的,致使不正確的結果

隱式類型轉換的發生點
-算術運算式中,低類型轉換爲高類型
-賦值表達式中,表達式的值轉換爲轉換爲左邊變量的類型
-函數調用時,實參轉換爲形參的類型
-函數返回值,return表達式轉換爲返回值類型
clipboard.png

例子4-2:

include "stdio.h"

int main()
{

char c = 'a';  
 int i = c;
 unsigned int j = 0x11223344;
 short s = j;        //有風險

printf("c = %c\n", c);
printf("i = %d\n", i);
printf("j = %x\n", j);
printf("s = %x\n", s);
printf("sizeof(c+j) = %d\n", sizeof(c + j));
return 0;

}
輸出結果:
c = a
j = 11223344
s = 3344
sizeof(c+j) = 4

小結:
·強制類型轉換由程序員負責完成
-轉換可能產生截斷
-轉換不區分類型的高低
-轉換不成功時,編譯器給出錯誤信息

·隱式類型轉換由編譯器自動完成
-低類型向高類型的轉換是安全的
-高類型向低類型的轉換是不安全的

標準C編譯器的類型檢查是比較寬鬆的,所以隱式類型轉換可能帶來意外的錯誤。

狄泰軟件學院

相關文章
相關標籤/搜索