閱讀754 返回首頁    go 阿裏雲 go 技術社區[雲棲]


深入理解typedef

                                                          深入理解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

  上一篇:go typedef用法
  下一篇:go 移除UTF-8文件頭的BOM