病人:醫生,我折騰了許久,無法理解函式指標。
中醫:能意識到自己不理解,不錯。那麼你說說你目前的理解。函式指標是什麼?
病人:函式指標是指向函式的指標。
中醫:那麼函式是什麼?
病人:函式就是函式。
中醫:不是指向函式的指標?
病人:自然不是。
中醫:那函式怎麼可以賦值給函式指標?難道int可以賦值給int* ?
病人:這個。。。。。。
中醫:邏輯不通了吧?
病人:是啊,怎麼回事哩?
中醫:這個問題先擱置一下,我問你,什麼是指標?
病人:是放位址的變數。
中醫:函式指標裡面放的什麼?
病人:函式入口位址。
中醫:那麼函式指標就是放函式入口位址的變數?
病人: (小心地)我同意。
中醫:函式是放函式入口位址的常量。
病人:哇!這樣一來就好解釋了!函式賦值給函式指標就像把常量賦值給同型別變數!
中醫:還有問題嗎?
病人:有,"函式是放函式入口位址的常量。"這句話不通啊。
函式是放自己入口位址的東西?
中醫:孺字可教。這裡"函式入口位址"是乙個詞,不能拆。真正的函式,無非是一塊**,
c/c++中沒有描述"一塊**"的東西,
只有描述"一塊**"的入口位址的東西,函式及函式指標。
病人:我懂了,"函式指標是指向函式(1)的指標"和"函式(2)不是指向函式(3)的指標"的矛盾,
出自"函式(1)"的是你剛才說的"真正的函式",
函式(2)(3)指的c/c++語法意義上的"函式",兩碼事!
中醫:嗯,有道理。那麼還有問題嗎?
病人:"函式指標是指向函式的指標。"這句話固然誤導人,不過c/c++的語法,也起到了推波助瀾的作用。
//#include
typedef int (*fn_haha)();
int real_haha()
void main(int argc, char* argv)
//既然 haha 和 real_haha是乙個層次上的東西,
那麼呼叫的時候為什麼 乙個 "real_haha();",
乙個(*haha)()哩?很明顯是在搞分化,搞腦子。
醫生:連c/c++語法你都敢批評,強的!
正如你所說,這不是好的語法,所以現在的編譯器,比如vc和gcc,
都允許用 haha();來代替傳統的(*haha)();你44就知道了。
至於書上都寫(*haha)();我只能說,
這個問題我自己也被書害了很久,最後扔了書自己想通的。
病人:我的病好了,我回去也把書扔了。
re: 病例:不理解c/c++的函式指標 2005-2-5 10:12 大怪獸
類的非靜態成員函式 和 全域性函式/靜態成員函式 的區別,
僅僅是多乙個隱含的"this"引數。
#re: 病例:不理解c/c++的函式指標 2005-3-31 14:10 tongwei
typedef void (cmsgbase::*msgproc)(void);
void cmsgbase::run(msgproc proc)
c C 指標函式
我們知道,指標式記憶體首位址,那是針對變數來說的,我也知道,程式是由變數,函式組成的。那麼函式的指標是怎麼定義的呢?我們也知道函式也是存放在記憶體的 區域,它同樣有首位址,關鍵是我們怎樣才能獲取它的位址呢?如果我們定義乙個 int test int a 的函式,那麼它的位址就是函式名字test,這一...
C C 函式指標
學好函式指標有著較為重要的意義,如windows程式設計中wndclass結構體的 lpfnwndproc 成員就是乙個函式指標,下面介紹簡單的函式指標應用。void toupper char void tolower char int round double 宣告了乙個名為pf的函式指標,該函式...
C C 函式指標
1.要指向的函式的宣告 返回型別 函式名 參數列 2.對應的函式指標的宣告,返回型別和參數列與要指向的函式宣告相同 返回型別 函式指標變數名 參數列 舉例 int func int a,int b 要指向的函式的宣告 int func ptr int a,int b 對應的函式指標的宣告 inclu...