政府網(wǎng)站誰(shuí)來(lái)做建網(wǎng)站需要多少錢
一、問(wèn)題
????????語(yǔ)?有 32 個(gè)關(guān)鍵字,其中 int 的功能是聲明整型變量,struct 的功能是聲明結(jié)構(gòu)體變量,那么 typedef 的功能是什么呢?
二、解答
1. typedef 的功能
????????在 C 語(yǔ)?中除了可以使?標(biāo)準(zhǔn)類型名(如 int、 char、float 等)和?定義結(jié)構(gòu)體、共?體等類型外,還可以使? typedef 給?有的類型定義別名,typedef 的功能就是給?經(jīng)存在的數(shù)據(jù)類型取?個(gè)別名,注意并不是重新定義?個(gè)新的數(shù)據(jù)類型。
2.為什么要給數(shù)據(jù)類型起別名
????????很多?都喜歡給別?“起外號(hào)",typedef 關(guān)鍵字就好?是這個(gè)喜歡起外號(hào)的?。外號(hào)是隨便起的嗎?并不是,外號(hào)往往是根據(jù)這個(gè)?的特點(diǎn)?起的。
????????例如,帶眼鏡的,外號(hào)就 叫“?四眼”;如果長(zhǎng)的?點(diǎn),就叫 “ ?個(gè) ” :長(zhǎng)的?點(diǎn)、胖點(diǎn),可能就叫他“?豬”等。
????????通過(guò)這些外號(hào),?們可以更快地記住這些?(揭示別?缺點(diǎn)的外號(hào)可能會(huì)傷及他?的?尊,所以盡量不要給別?起外號(hào)!)。同樣,給數(shù)據(jù)類型起外號(hào)也是有原因的,是為了更能突顯出這個(gè)數(shù)據(jù)類型在這個(gè)程序中的作?。
????????例如,int 型的數(shù)據(jù)在這個(gè)程序?主要起到了計(jì)數(shù)的 作?,那么 typedef 就可以給這個(gè) int 起個(gè)外號(hào)。例如:
typedef int COUNT, COUNT a,b;
????????當(dāng) COUNT 類型出現(xiàn)在程序中定義變量時(shí),程序員們可以很清晰地判斷出這是個(gè)?于計(jì)數(shù)的變量。這個(gè)外號(hào)使程序的可讀性??增強(qiáng)。
3. typedef 起別名引發(fā)的迷惑
????????在?定義結(jié)構(gòu)體的數(shù)據(jù)類型中,會(huì)經(jīng)常?到 typedef 為這個(gè)結(jié)構(gòu)體取個(gè)別名,例如:
typedef struct PERSON
{int id;int name[20];char sex;int age;
} PER, *Per1;
為?定義的這個(gè)結(jié)構(gòu)體取的別名為 PER 和 Perl,代表上?的這個(gè)結(jié)構(gòu)體類型,定義 ?個(gè)此結(jié)構(gòu)體類型的變量al,有如下?法:
(1) struct PERSON al;
(2) PER al;
????????這兩種定義變量的?法是沒(méi)有區(qū)別的。定義?個(gè)此結(jié)構(gòu)體類型的指針的?法如下:
(1) struct PERSON *a2;
(2) Perl a2;
(3) PER *s2;
????????上述三種定義結(jié)構(gòu)體類型指針的?法也是沒(méi)有區(qū)別的。
????????上述定義變量的?法很多初學(xué)者會(huì)迷惑,在此明確列出,希望可以減少在學(xué)習(xí)上的迷惑。其實(shí),在定義結(jié)構(gòu)體類型的變量 a1?時(shí),可以將結(jié)構(gòu)體 struct PERSON{...} 看成?個(gè)整體,typedef 就相當(dāng)于給 struct PERSON{.…} 起了個(gè)別名叫 PER ;與此同時(shí),給 struct PERSON {…}* 起了個(gè)別名叫 Per1。
三、總結(jié)
????????很多?在學(xué)習(xí) typedef 時(shí)都會(huì)將其誤認(rèn)為是定義新的數(shù)據(jù)類型。其實(shí)不然,只是起個(gè)別名?已。