對typedef的真正理解

2021-04-03 00:16:08 字數 1164 閱讀 9475

本人學c++也有三年了,還是對typedef不太熟,今天終於弄清楚了,所以發表此帖,希望對不太清楚的朋友能有所幫助。

首先請看看下面這兩句:

typedef int a[10];

typedef void (*p)(void);

如果你能一眼就看出它們的意思,那請不要再往下看了。如果你不太理解,或概念還有些模糊,請繼續往下看吧。

下面的東西我就直接把人家的東西粘上去吧。自己敲太慢了。呵呵。

原文(摘錄):

typedef用來宣告乙個別名,typedef後面的語法,是乙個宣告。本來筆者以為這裡不會產生什麼誤解的,但結果卻出乎意料,產生誤解的人不在少數。罪魁禍首又是那些害人的教材。在這些教材中介紹typedef的時候通常會寫出如下形式:

typedef int para;

這種形式跟#define int para幾乎一樣,如前面幾章所述,這些教材的宗旨是由淺入深,但實際做出來的行為卻是以偏蓋全。的確,這種形式在所有形式中是最簡單的,但卻沒有對typedef進一步解釋,使得不少人用#define的思維來看待typedef,把int與para分開來看,int是一部分,para是另一部分,但實際上根本就不是這麼一回事。int與para是乙個整體!就象int i:宣告一樣是乙個整體宣告,只不過int i定義了乙個變數,而typedef定義了乙個別名。這些人由於持有這種錯誤的觀念,就會無法理解如下一些宣告:

typedef int a[10];

typedef void (*p)(void);

他們會以為a[10]是int的別名,(*p)(void)是void的別名,但這樣的別名看起來又似乎不是合法的名字,於是陷入困惑之中。實際上,上面的語句把a宣告為具有10個int元素的陣列的型別別名,p是一種函式指標的型別別名。

雖然在功能上,typedef可以看作乙個跟int para分離的動作,但語法上typedef屬於儲存類宣告說明符,因此嚴格來說,typedef int para整個是乙個完整的宣告。

定義乙個函式指標型別。

比如原函式是   void   func(void);

那麼定義的函式指標型別就是typedef   void   (*fun)(void);

然後用此型別生成乙個指向函式的指標:   fun   func1;

當func1獲取函式位址之後,那麼你就可以向呼叫原函式那樣來使用這個函式指標:   func1(void);

typedef的真正理解

首先請看看下面這兩句 typedef int a 10 typedef void p void 如果你能一眼就看出它們的意思,那請不要再往下看了。如果你不太理解,或概念還有些模糊,請繼續往下看吧。下面的東西我就直接把人家的東西粘上去吧。自己敲太慢了。呵呵。原文 摘錄 typedef用來宣告乙個別名,...

真正理解java wait notify

從字面上理解,notify 方法能夠喚醒乙個正在等待該物件的monitor的執行緒,當有多個執行緒都在等待該物件的monitor的話,則只能喚醒其中乙個執行緒,具體喚醒哪個執行緒則不得而知。nofityall 方法能夠喚醒所有正在等待該物件的monitor的執行緒,這一點與notify 方法是不同的...

真正理解矩陣

孟巖,從很獨特的角度理解矩陣。理解矩陣 一 理解矩陣 二 理解矩陣 三 這裡的運動不同於物理中連續的運動,而是瞬間的從一點到另一點的運動 即躍遷 術語為 變換 因此,矩陣是對線性空間裡變換 即線性變換 的描述。選的基 座標系 不同,同乙個變換就有不同的描述,即有不同的矩陣,這些矩陣是相似的,矩陣a,...