·C語言中的數據類型能夠進行轉換
1.強制類型轉換
2.隱式類型轉換程序員
·強制類型轉換的語法
-(Type)var_name;
-(Type)value安全
·強制類型轉換的結果
-目標類型可以容納的目標值:結果不變
-目標類型不能容納的目標值:結果將產生截斷(比方說int類型轉化爲char類型,捨棄高3字節,留下低1字節)函數
·浮點數的強制類型轉換的結果保留整數部分,去掉小數部分。int a = (int)3.1415的結果爲3;spa
注意:
不是全部的強制類型轉換都能成功,當不能進行強制類型轉換時,編譯器將報錯。3d
例子4-1:code
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
注意:
低類型到高類型的隱式類型轉換是安全的,不會產生截斷(char →)
高類型到低類型的隱式類型轉換是不安全的,致使不正確的結果
隱式類型轉換的發生點
-算術運算式中,低類型轉換爲高類型
-賦值表達式中,表達式的值轉換爲轉換爲左邊變量的類型
-函數調用時,實參轉換爲形參的類型
-函數返回值,return表達式轉換爲返回值類型
例子4-2:
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編譯器的類型檢查是比較寬鬆的,所以隱式類型轉換可能帶來意外的錯誤。
狄泰軟件學院