函式指標是指指向函式而非指向物件的指標。像其他指標一樣,函式指標也指向某個特定的型別。函式型別由其返回型別以及形參表確定,而與函式名無關。
int (*pi)(const string &,const string &);
這個語句將pi申明為指向函式的指標,它所指向的函式帶有兩個const string& 型別的形參和int型別的返回值。
*pi兩側的園括號是必須的:
int *pi(const string&,const string&);
這個語句宣告了乙個名為pi的返回值為bool*的函式。
函式指標型別相當的冗長。使用typedef定義可以簡化。
typedef bool (*pfunc)(const string&,const string&);
該定義表示pfunc是一種指向函式的指標型別的名字。該指標型別為「指向返回bool型別並帶有兩個const string引用形參的函式的指標」。在要使用這種函式指標型別時,只需要直接使用cmpfcn即可,不必每次都把整個型別宣告全部寫出來。
在引用函式名但又沒有呼叫該函式時,函式名將會被自動解釋為指向函式的指標。假設有函式:
bool lengthcompare(const string &,const string &);
除了作函式呼叫的左運算元以外,對lengthcompare的所有操作將會被解釋為如下型別的指標:
bool (*)(const string&,const string&);
可以用函式名對函式指標做初始化或者賦值:
pfunc p1=0;
pfunc p2=lengthcompare;
此時直接使用函式名等於在函式名上做取位址操作。
lengthcompare等於&lengthcompare
pfunc pf=lengthcompare;
pf("hi","bbbbb");
或者(*pf)("hi","dfadsad");
函式的引數是指向函式的指標,可以使用下面的方式來宣告
void getcount(int cc,bool(string&,string&));
void getcount(int cc,bool (*)(string&,string&));
void getcount(int cc,bool (*pf)(string&,string&));
寫函式的時候應該如下寫
void getcount(int cc,bool (*p)(string&,string&))
c++允許使用函式指標指向過載函式:
指標的型別必須與過載函式的乙個版本精確匹配,如果沒有精確匹配的函式,則對該指標的賦值將導致編譯錯誤。
extern void ff(vector)
extern void ff(unsigned int)
void (*pf)(unsigned int)=&ff; //ok,第二個
void (*pf1)(int) =&ff; //error,沒有精確匹配
double (*pf2)(vector)=&ff; //error,返回型別不匹配
對C 中指向函式的指標的認識
指標不僅可以指向資料,還可以指向函式。資料在程式中要有記憶體位址進行儲存,同樣,函式 也需要占用記憶體空間進行儲存。資料型別函式名 形參列表 其實也就是 資料型別函式 首位址 形參列表 那麼指標就可以指向乙個函式了,指向函式的指標也叫做函式指標。函式指標的宣告方式 資料型別 函式指標名 形參列表 函...
C C 語言中指向函式的指標
在c語言中,函式本身不是變數,但可以定義指向函式的指標,這種指標可以被賦值 存放於陣列之中,傳遞給函式及作為函式的返回值等 the c programming language second edition 下面給出幾個簡單的例子來說明指向函式的指標。第乙個例子說明指向函式的指標如何說明 賦值 呼叫...
C C 語言中指向函式的指標
在c語言中,函式本身不是變數,但可以定義指向函式的指標,這種指標可以被賦值 存放於陣列之中,傳遞給函式及作為函式的返回值等 the c programming language second edition 下面給出幾個簡單的例子來說明指向函式的指標。第乙個例子說明指向函式的指標如何說明 賦值 呼叫...