如果從指標的層面上理解函式,那麼函式的函式名實際上就是乙個指標,指向該函式的**在記憶體中的首位址。
宣告函式指標:返回型別(*函式名)(參數列)
下面舉乙個函式指標的小例子:
int (*funcptr)(int);
int f(int a)
funcptr=f;
(*funcptr)(2); //也可以寫成funcptr(2)
關於呼叫函式指標時加不加*的討論,附上乙個比較不錯的觀點:呼叫函式指標時加不加星號?
在實際應用中,通常用typedef定義函式指標:
typedef 返回型別(*新型別)(參數列)
與typedef其它應用場合一樣,可以用定義的「新型別」來定義函式指標。
typedef int (*funcptr)(int);
funcptr funcptr;
int f(int a)
funcptr=f;
(*funcptr)(2);
相信有讀者看到這裡會發出乙個疑問:用typedef定義函式指標型別的時候,為什麼不是正常的「型別在左,別名在右」的順序呢?當然,這也是我學習函式指標時乙個疑惑的地方,於是在網上找到了一篇解釋的還算合理的部落格梁歡,下面是從中選取的一些內容:
typedef是c/c++中用於為現有型別建立更有意義的別名的關鍵字。對於普通型別來說,型別在左,別名在右:
typedef int size;
如果函式指標的定義也符合這種樣式,那麼下面下這樣定義才是合理的:
typedef void(*)(int) type;
但實際上編譯器採用的是如下的定義方式(以上的**編譯不過去的):
typedef void(*ptr)(int);
同樣的還有對陣列的重新命名(本來應該是「
typedef char[81] line;
」形式的,但由於同樣的原因不能這樣做):
typedef char line[81];
至於是不是編譯器在技術實現上前一種比較困難,我就不得而知了。
定義形式:typedef 返回型別(類名:
:*新型別)(參數列)
class ca
};ca ca;
typedef
void (ca::*ptrfun)(int); //定義類成員函式指標型別
ptrfun pfun;
void main()
C 成員函式指標的定義與使用
成員函式指標是相對於物件來說的,在說成員函式指標之前,先要明白普通函式指標的定義與使用。用vs先建立乙個專案,名稱隨意,然後在原始檔中宣告並且定義乙個函式,如下 include pch.h include using namespace std int add int a,int b int mai...
善用指標 指標定義與使用
1.在定義指標變數時必須指定基型別 因為不同的型別在計算機中占用的位元組數,儲存方式都是不一樣的。例如 使指標移動乙個位置,或使指標值加1,這個1代表什麼呢?如果指標是指向乙個整型變數的,那麼 使指標移動乙個位置 意味著移動4位元組 使指標加1 意味著使位址值加4個位元組。如果使用的是乙個雙精度型的...
使用typedef定義函式指標
形式1 返回型別 函式名 參數列 cpp view plain copy char pfun int char glfun inta void main 第一行定義了乙個指標變數pfun。首先我們根據前面提到的 形式1 認識到它是乙個指向某種函式的指標,這種函式引數是乙個int型,返回值是char型...