C語言簡明講解類型轉(zhuǎn)換的使用與作用
一、類型之間的轉(zhuǎn)換
C語言中的數(shù)據(jù)類型可以進行轉(zhuǎn)換
- 強制類型轉(zhuǎn)換
- 隱式類型轉(zhuǎn)換
二、強制類型轉(zhuǎn)換
強制類型轉(zhuǎn)換的語法
- (Type)var_name;
- (Type)value;
強制類型轉(zhuǎn)換的結(jié)果
- 目標(biāo)類型能夠容納目標(biāo)值:結(jié)果不變
- 目標(biāo)類型不能容納目標(biāo)值:結(jié)果將產(chǎn)生截斷
注意:不是所有的強制類型轉(zhuǎn)換都能成功,當(dāng)不能進行強制類型轉(zhuǎn)換時,編譯器將產(chǎn)生錯誤信息(比如將自定義數(shù)據(jù)類型轉(zhuǎn)換成基本數(shù)據(jù)類型)。
下面看一段強制類型轉(zhuǎn)換的代碼:
#include <stdio.h> struct TS { int i; int j; }; struct TS ts; int main() { short s = 0x1122; char c = (char)s; // 0x22 int i = (int)s; // 0x00001122 int j = (int)3.1415; // 3 unsigned int p = (unsigned int)&ts; //long l = (long)ts; // error //ts = (struct TS)l; // error 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; }
下面為輸出結(jié)果:
注意將自定義數(shù)據(jù)類型轉(zhuǎn)換成基本數(shù)據(jù)類型會報錯。
三、隱式類型轉(zhuǎn)換
隱式類型轉(zhuǎn)換是編譯器主動進行的類型轉(zhuǎn)換
注意:
低類型到高類型的隱式類型轉(zhuǎn)換是安全的,不會產(chǎn)生截斷
高類型到低類型的隱式類型轉(zhuǎn)換是不安全的,導(dǎo)致不正確的結(jié)果
四、表達式中的隱式類型轉(zhuǎn)換
隱式類型轉(zhuǎn)換的發(fā)生點
- 算術(shù)運算式中,低類型轉(zhuǎn)換為高類型
- 賦值表達式中,表達式的值轉(zhuǎn)換為左邊變量的類型
- 函數(shù)調(diào)用時,實參轉(zhuǎn)換為形參的類型
- 函數(shù)返回值,return表達式轉(zhuǎn)換為返回值類型
安全的隱式類型轉(zhuǎn)換:
下面看一段隱式類型轉(zhuǎn)換的代碼:
#include <stdio.h> int main() { char c = 'a'; int i = c; // safe unsigned int j = 0x11223344; short s = j; // unsafe printf("c = %c\n", c); printf("i = %d\n", i); printf("j = %x\n", j); printf("s = %x\n", s); printf("sizeof(c + s) = %d\n", sizeof(c + s)); return 0; }
下面為輸出結(jié)果:
c 為 char 類型,s 為 short 類型,再進行四則運算前,各個比 int 窄的加數(shù)自動提升為 int,結(jié)果也為 int 類型,故 size 為4
五、小結(jié)
強制類型轉(zhuǎn)換由程序員負責(zé)完成
- 轉(zhuǎn)換可能產(chǎn)生截斷
- 轉(zhuǎn)換不區(qū)分類型的高低
- 轉(zhuǎn)換不成功時,編譯器給出錯誤信息
隱式類型轉(zhuǎn)換由編譯器自動完成
- 低類型向高類型的轉(zhuǎn)換是安全的
- 高類型向低類型的轉(zhuǎn)換是不安全的
標(biāo)準(zhǔn)C編譯器的類型檢查是比較寬松的,因此隱式類型轉(zhuǎn)換可能帶來意外的錯誤。
到此這篇關(guān)于C語言簡明講解類型轉(zhuǎn)換的使用與作用的文章就介紹到這了,更多相關(guān)C語言 類型轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vscode搭建遠程c開發(fā)環(huán)境的圖文教程
很久沒有寫C語言了,今天抽空學(xué)習(xí)下C語言知識,接下來通過本文給大家介紹Vscode搭建遠程c開發(fā)環(huán)境的詳細步驟,本文通過圖文實例代碼相結(jié)合給大家介紹的非常詳細,需要的朋友參考下吧2021-11-11C語言統(tǒng)計一串字符中空格鍵、Tab鍵、回車鍵、字母、數(shù)字及其他字符的個數(shù)(Ctrl+Z終止輸入)
這篇文章主要介紹了C語言統(tǒng)計一串字符中空格鍵、Tab鍵、回車鍵、字母、數(shù)字及其他字符的個數(shù)(Ctrl+Z終止輸入) ,需要的朋友可以參考下2018-03-03