是指向函數的指針變量,即重點是一個指針。一種特殊的指針,它指向函數的入口;
要聲明指向特定類型的函數指針,能夠首先編寫這個函數的原型,而後用(*p)來替換函數名,這樣p就是這類函數的指針。ios
//格式:類型說明符 (*函數名)(參數) int (*f) (int x);
指向函數的指針包含了函數的地址,能夠經過它來調用函數,其實這裏不能稱爲函數名,應該叫作指針的變量名。這個特殊的指針指向一個返回整型值的函數實現地址。指針的聲明筆削和它指向函數的聲明保持一致。函數
#include <iostream> /* * 定義一個函數指針p,只能指向返回值爲int,形參爲兩個int的函數 */ int(*p)(int, int); /* * 求最大值 * 返回值是int類型,返回兩個整數中較大的一個 */ int max(int a, int b) { return a > b ? a : b; } /* * 求最小值 * 返回值是int類型,返回兩個整數中較小的一個 */ int min(int a, int b) { return a < b ? a : b; } int main(){ p = max; // 函數指針f指向求最大值的函數max int c = (*p)(1, 2); std::cout << c << std::endl; //p = min; // 函數指針f指向求最小值的函數min //c = (*f)(1, 2); //std::cout << c << std::endl; }
就是指針的函數,表示是一個函數,函數返回類型是某一類型的指針
返回指針的函數,一個函數,它的返回值是指針;指針
//格式:類型標識符 *函數名(參數表) int *f(x,y);
#include <iostream> /* * 指針函數的定義 * 返回值是指針類型int * */ int *f(int a, int b) { int *p = (int *)malloc(sizeof(int)); memset(p, 0, sizeof(int)); *p = a + b; return p; } int main(){ int *p1 = NULL; p1 = f(1, 2); std::cout << *p1 << std::endl; }
注意:回調函數要麼是全局函數,要麼是靜態函數!
code