我們知道在 C 語言中有時會需要進行類型的轉(zhuǎn)換,這個轉(zhuǎn)換分為兩種。一種是強制類型轉(zhuǎn)換,如:short s = 2; int i = (int)s; 還有一種就是隱式類型轉(zhuǎn)換,如:short s = 5; int i = s;這種就屬于隱式的類型轉(zhuǎn)換。下來我們就介紹下這兩種類型轉(zhuǎn)換。
創(chuàng)新互聯(lián)制作網(wǎng)站網(wǎng)頁找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁設(shè)計,成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè),網(wǎng)站設(shè)計,企業(yè)網(wǎng)站搭建,網(wǎng)站開發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為成百上千服務(wù),創(chuàng)新互聯(lián)網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣服務(wù)!強制類型轉(zhuǎn)換的語法:1、(Type)var_name;2、(Type)value; 強制類型轉(zhuǎn)換的結(jié)果當(dāng)然也就分為兩種:1、目標(biāo)類型能夠容納目標(biāo)值,這種結(jié)果將是不變的。2、目標(biāo)類型不能容納目標(biāo)值,這種的結(jié)果就是將產(chǎn)生截斷。注意:不是所有的強制類型轉(zhuǎn)換都能成功,當(dāng)不能進行強制類型轉(zhuǎn)換時,編譯器將產(chǎ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; }
根絕分析,我們得知 18、19行將出錯,因為自定義類型不能轉(zhuǎn)換。編譯下,我們得到如下結(jié)果:
那么我們就注釋掉那兩行代碼,再次編譯,得到如下結(jié)果:
我們對照著在代碼中分析的結(jié)果,從側(cè)面驗證了我們的分析是對的。
那么隱式類型轉(zhuǎn)換又是怎樣的呢?隱式類型轉(zhuǎn)換是編譯器主動進行的轉(zhuǎn)換。注意:低類型到高類型的隱式類型轉(zhuǎn)換是安全的,不會產(chǎn)生截斷;高類型到低類型的隱式類型轉(zhuǎn)換是不安全的,導(dǎo)致不正確的結(jié)果。
那么隱式類型轉(zhuǎn)換都會在什么情況下發(fā)生呢?1、算數(shù)運算中,低類型轉(zhuǎn)換為高類型;2、賦值表達式中,表達式的值轉(zhuǎn)換為左邊變量的類型;3、函數(shù)調(diào)用時,實參轉(zhuǎn)換為形參的類型;4、函數(shù)返回值,return 表達式轉(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é)果如下:
從上述結(jié)果我們可以看到 c 到 i 的轉(zhuǎn)換是安全的,小寫字母 a 對應(yīng)的 ASCII 值為97,所以打印的值為97。由 j 到 s 就是不安全的了,所以會發(fā)生截斷。c 和 s 相加時,兩個都會默認轉(zhuǎn)換成 int 型,所以兩個相加 sizeof 后大小為4。
我們在平時一定要注意隱式類型轉(zhuǎn)換,因為編譯器有時會自動進行隱式類型轉(zhuǎn)換。強制類型轉(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)換可能會帶來意外的錯誤。
歡迎大家一起來學(xué)習(xí) C 語言,可以加我QQ:243343083。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
新聞標(biāo)題:C之類型轉(zhuǎn)換(四)-創(chuàng)新互聯(lián)
本文鏈接:http://aaarwkj.com/article46/gdihg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、移動網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、手機網(wǎng)站建設(shè)、網(wǎng)站排名、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容