C++中函數指針的形式為:返回值類型 + 參數類型,函數沒有值類型,但是卻可以聲明函數的指針,因為函數是可尋址的,存放在內存中的代碼段,可以從指針訪問。
函數指針可以聲明為:
void (*pF)(void); // ^括號1 // ^括號2
其中pF為參數為空,返回值也為空的函數類型,因為*操作符的優先級低於函數調用操作符,所以必須在*pF外加括號。
那么如何聲明返回值為函數指針的函數呢?
先給出一個實例:
void (* fun() )(); // ^ 括號a // ^括號b // ^括號c
該函數的返回值為一個函數指針,解析下這個聲明的三個括號分別代表的意義:括號a對應第一個聲明中的括號1,括號c對應第一個聲明中的括號2,而括號c則是該函數自身的函數調用符,可以在該括號內放入函數參數如:
//參數為一個int類型 void (* fun(int x) )(); //參數為兩個int類型 void (* fun(int x, int y) )(); //參數為一個函數指針類型 void (* fun( void (*f)() ) )();
其中第三個例子的參數為一個函數指針,括號比較多,要仔細看才能夠看出這個聲明的結構。
