真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:申請域名、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、潼南網(wǎng)站維護(hù)、網(wǎng)站推廣。

        強(qiáng)制類型轉(zhuǎn)換的語法:1、(Type)var_name;2、(Type)value;    強(qiáng)制類型轉(zhuǎn)換的結(jié)果當(dāng)然也就分為兩種:1、目標(biāo)類型能夠容納目標(biāo)值,這種結(jié)果將是不變的。2、目標(biāo)類型不能容納目標(biāo)值,這種的結(jié)果就是將產(chǎn)生截斷。注意:不是所有的強(qiáng)制類型轉(zhuǎn)換都能成功,當(dāng)不能進(jìn)行強(qiáng)制類型轉(zhuǎn)換時,編譯器將產(chǎn)生錯誤信息。

        下來我們做個實驗驗證下,代碼如下所示:

#include 

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é)果:

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

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

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

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

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

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

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

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

        接下來我們再次做個實驗驗證下,代碼如下:

#include 

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之類型轉(zhuǎn)換(四)

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

        我們在平時一定要注意隱式類型轉(zhuǎn)換,因為編譯器有時會自動進(jìn)行隱式類型轉(zhuǎn)換。強(qiáng)制類型轉(zhuǎn)換由程序員自己負(fù)責(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。


本文標(biāo)題:C之類型轉(zhuǎn)換(四)
文章位置:http://weahome.cn/article/jedeho.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部