-
用法一:可以減少代碼的書寫量
struct student{
int data;
char name[10];
};
當我們定義學生結構體的時候要這么定義struct student s1,s2,s3; 如果想定義結構體指針,我們可以這么定義,struct student *ps1, ps2; 顯然ps2不是指針類型,但是好多初學者對指針不熟悉驹碍,所以容易出錯,但是當我們用typedef的時候心例,就不會出現(xiàn)這樣的錯誤了颤陶,
typedef struct student{
int data;
char name[10];
}stu, *pstu;
我們定義的時候可以這么定義stu s1, s2, s3; 定義結構體指針的時候,可以這么定義,pstu ps1, ps2; 這樣ps1迄埃, ps2都是指針類型的變量 這是typedef的用法之一妄迁,也是比較常用的寝蹈。
-
用法二:可以實現(xiàn)代碼的復用性和可擴展性
如果一段代碼沒有擴展性和復用性,那么這段代碼就不能算得上是一段特別規(guī)范的代碼判族,就像我們?yōu)榱藢崿F(xiàn)代碼的復用性躺盛,提高程序可讀性的時候,用函數(shù)一樣形帮,提高代碼的復用性和可擴展性是作為軟件開發(fā)者必備的本領槽惫。一段好的代碼,如果在別的項目中引用的話辩撑,如果功能類似界斜,基本上改不了幾行,這就是規(guī)范性的重要性(這里先不談規(guī)范性合冀,但是這個typedef的用法也涉及規(guī)范性各薇,嘿嘿,所以規(guī)范是避免不了的)君躺。就這么來說吧峭判,假如我們定義了一個結構體
struct student{
int score;
char name[10];
};我們想把成績改成double類型的,應為int的精度太低了棕叫,但是下面用到的地方可能都要改掉林螃,但是,我們要是用typedef一下俺泣, 問題就變得簡單多了疗认,
typedef int typeitem;
struct student{
typeitem score;
char name[10];
};這樣直接改typedef就行了伏钠,其他的代碼根本不用動横漏,這就是分層的原因,我們只改變最底層的熟掂,上層的東西根本不用變(就像在鏈表中缎浇,我們可以把它分為三層,純數(shù)據(jù)層赴肚、節(jié)點層华畏、head指針層鹏秋,也就是整條鏈)這樣分層處理問題會變得簡單得多尊蚁。還有就是平臺不同可以兼容亡笑,就像有的平臺不支持long double類型,但是你如果定義了long double 直接不能用横朋,但是如果這么 typedef long double typeitem仑乌; 直接改成可以支持的類型就行啦,根本不用那么麻煩改下面的代碼琴锭,這也是比較重要的用途晰甚。
-
用途三:簡化,提高可讀性
想必大家覺得决帖,這個用途不是包含在上面的用途之中了嗎厕九,為什么還要再說一遍呢,其實我舉個例子你也就明白了地回,typedef int array[10]扁远,這個代表什么意思,這可不是平時那種array[10】是個int了吧刻像,這個代表畅买,array是個重定義的類型,array a细睡; 就代表a是一個含有10個int型元素的數(shù)組谷羞,這么定義可能覺得簡化不了多少,還不如直接int a[10];看著明白呢溜徙,好! 繼續(xù)往下看,typedef array Array[5]; 這個呢湃缎,如果我這么定義一個變量 Array arr[2]; 這個又是什么意思呢?這個就是定義個Array類型數(shù)組蠢壹,其中這個“一維”數(shù)組有兩個元素嗓违,但是每個元素又都是Array 類型的,每個Array又是一個5行10列二維數(shù)組知残,所以arr就是一個三維數(shù)組靠瞎,他就等于int arr[2][5][10]; 是不是看的有點蒙了, 其實在C語言中根本不存在多維數(shù)組求妹,全部都是一維數(shù)組乏盐,只是一維數(shù)組里面又含一維數(shù)組,所以才構成了所謂的“多維”數(shù)組制恍, 如果這樣理解的話父能,是不是覺得多維數(shù)組也就不那么“神奇”了,變得簡單了净神,沒有那么暈了何吝,這樣定義的好處就是可以講一個多維的數(shù)組轉化成我們比較熟悉的一維數(shù)組溉委,這樣操作起來就比較容易了,可讀性自然也會增強爱榕。所以這就是他的“簡化”的作用瓣喊。其實我們還可以在函數(shù)指針上體現(xiàn),想定義個函數(shù)指針int (p)(); 我們可以定義為typedef int (POWER)(); 接下來可以直接定義POWER p1, p2; 他就等價于int (p1)(), int (p2)(); 這樣也非常易懂黔酥。