91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C之類型轉換(四)

發布時間:2020-07-07 02:23:17 來源:網絡 閱讀:872 作者:上帝之子521 欄目:編程語言

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

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

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

#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行將出錯,因為自定義類型不能轉換。編譯下,我們得到如下結果:

C之類型轉換(四)

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

C之類型轉換(四)

        我們對照著在代碼中分析的結果,從側面驗證了我們的分析是對的。

        那么隱式類型轉換又是怎樣的呢?隱式類型轉換是編譯器主動進行的轉換。注意:低類型到高類型的隱式類型轉換是安全的,不會產生截斷;高類型到低類型的隱式類型轉換是不安全的,導致不正確的結果。

        那么隱式類型轉換都會在什么情況下發生呢?1、算數運算中,低類型轉換為高類型;2、賦值表達式中,表達式的值轉換為左邊變量的類型;3、函數調用時,實參轉換為形參的類型;4、函數返回值,return 表達式轉換為返回值類型。

        如下是安全的隱式類型轉換:

C之類型轉換(四)

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

#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;
}

        編譯運行下,結果如下:

C之類型轉換(四)

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

        我們在平時一定要注意隱式類型轉換,因為編譯器有時會自動進行隱式類型轉換強制類型轉換由程序員自己負責完成,它的轉換可能產生截斷、轉換時不區分類型的高低、轉換不成功時,編譯器會給出錯誤信息。隱式類型轉換由編譯器自動完成,在由低類型向高類型的轉換是安全的,高類型向低類型轉換是不安全的。標準 C 編譯器的類型檢查是比較寬松的,因此隱式類型轉換可能會帶來意外的錯誤。


        歡迎大家一起來學習 C 語言,可以加我QQ:243343083

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开原市| 泾川县| 靖西县| 虹口区| 梧州市| 台中县| 林西县| 彭阳县| 尤溪县| 台南市| 郁南县| 莆田市| 内江市| 武强县| 铜川市| 休宁县| 台前县| 延长县| 静海县| 五大连池市| 紫云| 镇坪县| 临城县| 诏安县| 濮阳县| 广饶县| 兰溪市| 永修县| 卓资县| 雷山县| 江安县| 乐平市| 宝坻区| 京山县| 瓦房店市| 沿河| 襄樊市| 军事| 泸西县| 通辽市| 衡东县|