深入理解typedef
關於typedef的用法,網上已經有很多前輩總結過了,在這裏我不想標新立異,代碼閱曆不一樣,所理解的typedef的層次各有不同。這裏,我想就我所理解的typedef用更加通俗易懂的方式寫出來。
在開始之前,要始終牢記:
typedef的本質是取一個別名
先從簡單的說起:
- typedef alias type型
這裏,typedef後麵有2個量。這種方式是我們通常見到的最多的用法
typedef i_type int; i_type sun;
Linux下麵,變量命名不能將就匈牙利命名法。
typedef就是為一種類型取別名,我們用這個別名去定義變量,那麼該變量的類型就是別名的原始引用(可能說引用有些不太恰當)
i_type是int的別名。
那麼用i_type去定義變量
i_type sun
實際上就是對原始類型(這裏的原始變量是指int)的引用
即int sun
typedef alias type這種類型的還很多。
例如:
typedef struct Node{ int type; ..... }inode; /* 定義了一個結構體變量。如果沒有typedef,我們定義結構體變量的時候,需要加struct關鍵字。 */ inode nod; /* 就上麵的定義, 同樣,我們一步一步的分析。 首先,去掉typedef關鍵字 inode是什麼? 回答:inode是struct Node的一個結構體變量。 然後,加上typedef。 inode是什麼? 回答:inode是一個別名 是誰的別名? 回答:是結構體變量的別名。 既然走到這裏,一切都好辦了。 */ inode nod; /* 再來。既然上麵已經說清楚了。inode是結構體變量的別名。 那麼,根據別名是對原始類型的引用的理論。上麵的語句中,別名的原始類型是結構體變量。 那麼,nod是什麼? 回答:nod是結構體變量 */
這樣的例子還很多,我就不一一列舉了。
- typedef express 型
這裏,typedef,後麵隻有包含了別名的一個量或者一個表達式。
先舉一個例子
typedef void (*func)(int, char); func set; /* 同樣,先說說func是什麼。 在這裏,func表示一個函數指針,該函數有int char兩個變量。 所以,func就是一個帶兩個參數函數的指針 所以,set就是一個帶兩個參數的函數指針的變量。 既然如此,set就是一個帶有兩個參數的函數的入口地址。 */ (*set)(int ,'a');//所以,這裏就是合法的 /* 若果沒有typedef的話,我們需要3步來完成這個任務 void func(int, char); void (*set)(int ,char); set = &func; set = func也是合法的,這裏隻是為了強調地址 set = func這種用法參考譚浩強《C語言程序設計》(第三版)P261的小例子 */
分析道這裏。你應該大概能看到typedef的意思了。
typdef char* point;
去掉typedef,point是一個指向char類型的指針。
那麼
point ptr
ptr也就是一個指向char的指針。
為了驗證自己的理解,可以隨便找幾個typedef分析,看能不能分析透徹。
版權申明:
轉載文章請注明原文出處https://blog.csdn.net/feiyinzilgd/archive/2010/12/14/6076396.aspx
並請聯係譚海燕本人或者前往譚海燕個人主頁留言
最後更新:2017-04-02 06:51:32