C之類(lèi)型轉(zhuǎn)換(四)-創(chuàng)新互聯(lián)

    我們知道在 C 語(yǔ)言中有時(shí)會(huì)需要進(jìn)行類(lèi)型的轉(zhuǎn)換,這個(gè)轉(zhuǎn)換分為兩種。一種是強(qiáng)制類(lèi)型轉(zhuǎn)換,如:short s = 2;    int i = (int)s;    還有一種就是隱式類(lèi)型轉(zhuǎn)換,如:short s = 5;    int i = s;這種就屬于隱式的類(lèi)型轉(zhuǎn)換。下來(lái)我們就介紹下這兩種類(lèi)型轉(zhuǎn)換。

創(chuàng)新互聯(lián)制作網(wǎng)站網(wǎng)頁(yè)找三站合一網(wǎng)站制作公司,專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì),成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè),網(wǎng)站設(shè)計(jì),企業(yè)網(wǎng)站搭建,網(wǎng)站開(kāi)發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為成百上千服務(wù),創(chuàng)新互聯(lián)網(wǎng)站建設(shè)將一如既往的為我們的客戶(hù)提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣服務(wù)!

        強(qiáng)制類(lèi)型轉(zhuǎn)換的語(yǔ)法:1、(Type)var_name;2、(Type)value;    強(qiáng)制類(lèi)型轉(zhuǎn)換的結(jié)果當(dāng)然也就分為兩種:1、目標(biāo)類(lèi)型能夠容納目標(biāo)值,這種結(jié)果將是不變的。2、目標(biāo)類(lèi)型不能容納目標(biāo)值,這種的結(jié)果就是將產(chǎn)生截?cái)唷W⒁猓翰皇撬械膹?qiáng)制類(lèi)型轉(zhuǎn)換都能成功,當(dāng)不能進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換時(shí),編譯器將產(chǎn)生錯(cuò)誤信息。

        下來(lái)我們做個(gè)實(shí)驗(yàn)驗(yà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行將出錯(cuò),因?yàn)樽远x類(lèi)型不能轉(zhuǎn)換。編譯下,我們得到如下結(jié)果:

C之類(lèi)型轉(zhuǎn)換(四)

        那么我們就注釋掉那兩行代碼,再次編譯,得到如下結(jié)果:

C之類(lèi)型轉(zhuǎn)換(四)


        我們對(duì)照著在代碼中分析的結(jié)果,從側(cè)面驗(yàn)證了我們的分析是對(duì)的。

        那么隱式類(lèi)型轉(zhuǎn)換又是怎樣的呢?隱式類(lèi)型轉(zhuǎn)換是編譯器主動(dòng)進(jìn)行的轉(zhuǎn)換。注意:低類(lèi)型到高類(lèi)型的隱式類(lèi)型轉(zhuǎn)換是安全的,不會(huì)產(chǎn)生截?cái)啵桓哳?lèi)型到低類(lèi)型的隱式類(lèi)型轉(zhuǎn)換是不安全的,導(dǎo)致不正確的結(jié)果。

        那么隱式類(lèi)型轉(zhuǎn)換都會(huì)在什么情況下發(fā)生呢?1、算數(shù)運(yùn)算中,低類(lèi)型轉(zhuǎn)換為高類(lèi)型;2、賦值表達(dá)式中,表達(dá)式的值轉(zhuǎn)換為左邊變量的類(lèi)型;3、函數(shù)調(diào)用時(shí),實(shí)參轉(zhuǎn)換為形參的類(lèi)型;4、函數(shù)返回值,return 表達(dá)式轉(zhuǎn)換為返回值類(lèi)型。

        如下是安全的隱式類(lèi)型轉(zhuǎn)換:


C之類(lèi)型轉(zhuǎn)換(四)


        接下來(lái)我們?cè)俅巫鰝€(gè)實(shí)驗(yàn)驗(yà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;
}

        編譯運(yùn)行下,結(jié)果如下:

C之類(lèi)型轉(zhuǎn)換(四)

        從上述結(jié)果我們可以看到 c 到 i 的轉(zhuǎn)換是安全的,小寫(xiě)字母 a 對(duì)應(yīng)的 ASCII 值為97,所以打印的值為97。由 j 到 s 就是不安全的了,所以會(huì)發(fā)生截?cái)?。c 和 s 相加時(shí),兩個(gè)都會(huì)默認(rèn)轉(zhuǎn)換成 int 型,所以?xún)蓚€(gè)相加 sizeof 后大小為4。

        我們?cè)谄綍r(shí)一定要注意隱式類(lèi)型轉(zhuǎn)換,因?yàn)榫幾g器有時(shí)會(huì)自動(dòng)進(jìn)行隱式類(lèi)型轉(zhuǎn)換。強(qiáng)制類(lèi)型轉(zhuǎn)換由程序員自己負(fù)責(zé)完成,它的轉(zhuǎn)換可能產(chǎn)生截?cái)?、轉(zhuǎn)換時(shí)不區(qū)分類(lèi)型的高低、轉(zhuǎn)換不成功時(shí),編譯器會(huì)給出錯(cuò)誤信息。隱式類(lèi)型轉(zhuǎn)換由編譯器自動(dòng)完成,在由低類(lèi)型向高類(lèi)型的轉(zhuǎn)換是安全的,高類(lèi)型向低類(lèi)型轉(zhuǎn)換是不安全的。標(biāo)準(zhǔn) C 編譯器的類(lèi)型檢查是比較寬松的,因此隱式類(lèi)型轉(zhuǎn)換可能會(huì)帶來(lái)意外的錯(cuò)誤。

        歡迎大家一起來(lái)學(xué)習(xí) C 語(yǔ)言,可以加我QQ:243343083。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞標(biāo)題:C之類(lèi)型轉(zhuǎn)換(四)-創(chuàng)新互聯(lián)
本文鏈接:http://bm7419.com/article46/gdihg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)網(wǎng)站排名、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)