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)型。
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)型。

