<kbd id="daqct"></kbd>

  • <nav id="daqct"></nav>
    <wbr id="daqct"><pre id="daqct"></pre></wbr>
    <wbr id="daqct"></wbr>
    <form id="daqct"><th id="daqct"></th></form>
    更多課程 選擇中心

    C/C++培訓
    達內IT學院

    400-111-8989

    一句話幫你理解typedef的用法

    • 發布:C++培訓
    • 來源:企業面試題
    • 時間:2020-07-01 16:28

    在C語言中typedef用來給復雜聲明定義別名非常的方便,不過有時候typedef在復雜聲明中不好理解。本文關鍵的一句話幫你理解ytpedef的用法。

    typedef常見應用場景

    在這之前,我們來看看一些常見應用場景。

    為特定含義的類型取別名

    例如,假設速度是整型值:

    typedef int SpeedType;

    那么你就可以像下面這樣使用了:

    #include<stdio.h>

    typedef int SpeedType;

    int main(void)

    {

    SpeedType s = 10;

    printf("speed is %d m/s",s);

    return 0;

    }

    在main函數中,你可以直接使用SpeedType作為一種類型來定義變量了。有人可能問了,為什么要這樣,直接使用int不是更好嗎?那么如果你的代碼中很多地方都用到了這個,但是突然有一天不再使用int,而是使用long呢?是不是直接修改typedef部分就可以了?(當然打印的地方也需要變,可自定義打印函數),另外一方面,通過SpeedType這個名字就可以非常直接的讀懂變量的含義。

    事實上,size_t,socklen_t等類型都是類似的定義。

    說到typedef,就需要提一下define了,define只是一個字符串簡單替換。當然下面這樣的例子你可能見過很多次了:

    #define PIONTER int*

    PIONTER a,b; //等同于int* a,b;

    typedef int* POINTER1

    POINTER1 c,d;//等同于int *c;int *d;

    為結構體取別名

    這個也比較常見,不過有的人認為,為結構體取別名并不是一個明智的選擇,因為它在使用的時候不能直觀看到它是結構體類型了。

    struct info

    {

    char name[128];

    int length;

    };

    那么你在聲明變量的時候,需要帶上struct,即像下面這樣使用:

    struct info var;

    但是如果你用typedef取個別名呢?

    typedef struct info

    {

    char name[128];

    int length;

    }Info;

    你就可以像下面這樣使用了:

    Info var;

    聲明函數指針類型

    前面的都很好理解,那么來看看函數指針:

    typedef void*(*Fun)(int,int);

    這里將返回類型為void *,入參為int的函數類型命名為Fun,那么在其他地方,就可以像下面這樣使用啦:

    #include <stdio.h>

    typedef void*(*Fun)(int,int);

    void *test(int a,int b)

    {

    printf("%d,%d

    ",a,b);

    //do something

    return NULL;

    }

    int main(void)

    {

    Fun myfun = test;//這里的Fun已經是一種類型名了

    myfun(1,1);

    return 0;

    }

    是不是發現跟前面的不一樣了呢?類型別名的位置飄忽不定,有的在最后,有的在中間。當然typedef的場景并不限于以上幾種,這里僅僅是舉例。

    一句話理解

    我不知道你是不是已經完全理解了前面的場景,無論理解與否,這句話都能很好的幫助你再次理解前面的內容:typedef中聲明的類型在變量名的位置出現。什么意思呢,我們回頭來看。我們是怎么聲明int類型變量的?

    int Typename;

    像上面這樣,對不對?那么用typedef之后呢?把變量名的位置替換為別名:

    typedef int Typename;

    好了,你現在已經把為int取別名為Typename。

    再來看結構體,聲明普通結構體變量:

    struct info

    {

    char name[128];

    int length;

    };

    struct info Typename;

    用typedef取別名,別名取代變量名的位置:

    struct info

    {

    char name[128];

    int length;

    };

    typedef struct info Typename;

    好了,你現在已經為struct info取別名為Typename。

    當然這可能我們平常通常使用下面這種寫法:

    typedef struct info

    {

    char name[128];

    int length;

    }Typename;

    再來看函數指針類型,我們平常是如何聲明函數的?

    void *function(int,int);

    那么使用typedef取別名呢?用別名取代函數名的位置即可:

    void *(*Fun)(int,int);

    不過這里需要注意用括號將這個別名括起來,并在前面加*號。

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:C語言中的 #if()和 #end if 用法
    下一篇:沒有下一篇了

    C語言中的 #if()和 #end if 用法

    這20道C++的面試題你要知道

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美三级片,白洁外传,第四色播日韩AV第一页,啪啪免费观看大全av 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>