函數指針
函數指針指向的是函數而非對象。和其他指針一樣,函數指針指向某種特定類型。函數的類型由它的返回值和形參共同決定,與函數名無關。
函數指針聲明方法:
函數類型(*指針變量名)(形參列表)
函數類型指:函數返回值類型,"(*指針變量名)"中括號不能省,若省略則爲一個返回數據類型爲指針的函數。例如:
bool func(string a);//函數聲明
bool (*pf)(string a);//指針函數聲明。pf指向一個函數。該函數的形參爲string類型,返回值類型爲bool類型。
bool *pf(string a );//pf是一個返回值爲bool指針的函數
使用函數指針
當我們把函數名作爲一個值使用時,該函數自動轉換成指針。
pf=func;//pf指名爲func的函數
pf=&func;//等價的賦值語句
調用,下列3中調用方法等價
bool b1=pf("hello");
bool b2=(*)pf("hello");
bool b3=func("hello");
在指向不同函數類型的指針之間不存在轉換規則。但可爲函數指針賦值爲nullptr或0,表示沒有指向任何一個函數。
string::size_type=func2(string b);
bool func3(char *);
pf=func2//錯,返回類型不同
pf=func3//錯, 形參類型不同
pf=func1//對。返回類型和形參類型匹配
pf=0;//對。pf不指向任何函數
重載函數的指針
使用重載函數必須明確的指出選用哪個函數。
double f(int *);
double f(unsigned int);
double (*pf1)(int *)=f//對
void (*pf2)(int *)=f//錯 返回類型不同
double (*pf)(int)=f//錯