C語(yǔ)言中的typedef問(wèn)題

字號(hào):

1. 基本解釋
    typedef為C語(yǔ)言的關(guān)鍵字,作用是為一種數(shù)據(jù)類(lèi)型定義一個(gè)新名字。這里的數(shù)據(jù)類(lèi)型包括內(nèi)部數(shù)據(jù)類(lèi)
    型(int,char等)和自定義的數(shù)據(jù)類(lèi)型(struct等)。
    在編程中使用typedef目的一般有兩個(gè),一個(gè)是給變量一個(gè)易記且意義明確的新名字,另一個(gè)是簡(jiǎn)化一
    些比較復(fù)雜的類(lèi)型聲明。
    至于typedef有什么微妙之處,請(qǐng)你接著看下面對(duì)幾個(gè)問(wèn)題的具體闡述。
    2. typedef & 結(jié)構(gòu)的問(wèn)題
    當(dāng)用下面的代碼定義一個(gè)結(jié)構(gòu)時(shí),編譯器報(bào)了一個(gè)錯(cuò)誤,為什么呢?莫非C語(yǔ)言不允許在結(jié)構(gòu)中包含
    指向它自己的指針嗎?請(qǐng)你先猜想一下,然后看下文說(shuō)明:
    typedef struct tagNode
    {
    char *pItem;
    pNode pNext;
    } *pNode;
    答案與分析:
    1、typedef的最簡(jiǎn)單使用
    typedef long byte_4;
    給已知數(shù)據(jù)類(lèi)型long起個(gè)新名字,叫byte_4。
    2、 typedef與結(jié)構(gòu)結(jié)合使用
    typedef struct tagMyStruct
    {
    int iNum;
    long lLength;
    } MyStruct;
    這語(yǔ)句實(shí)際上完成兩個(gè)操作:
    1) 定義一個(gè)新的結(jié)構(gòu)類(lèi)型
    struct tagMyStruct
    {
    int iNum;
    long lLength;
    };
    分析:tagMyStruct稱(chēng)為“tag”,即“標(biāo)簽”,實(shí)際上是一個(gè)臨時(shí)名字,struct 關(guān)鍵字和
    tagMyStruct一起,構(gòu)成了這個(gè)結(jié)構(gòu)類(lèi)型,不論是否有typedef,這個(gè)結(jié)構(gòu)都存在。
    我們可以用struct tagMyStruct varName來(lái)定義變量,但要注意,使用tagMyStruct varName來(lái)定義
    變量是不對(duì)的,因?yàn)閟truct 和tagMyStruct合在一起才能表示一個(gè)結(jié)構(gòu)類(lèi)型。