1、函數指針ios
函數的目標碼有一個入口地址,這個入口地址就對應函數的指針。函數的指針能賦給一個指向特定函數類的指針變量,並能經過指向函數的指針變量調用它所指向的函數。
數組
定義指向函數的指針變量的通常形式爲
ide
返回值類型 (*指針變量名)(形參列表)
函數
例如:
spa
int (*p)();//定義p是一個指向函數的指針變量,其函數返回值爲int型。
指針
定義了指向函數的指針變量,就可向它賦某函數的入口地址。函數名自己就是函數入口地址常量,當一個指向函數的指針變量指向某個函數時,就可用它調用它所指的函數。通常形式的函數調用爲
原型
函數名(實參表)
回調函數
改用指向函數的指針變量調用該函數,寫爲it
(*指針變量名)(實參表)
io
例如:求兩個整數中小者的函數min(a,b )返回int型值,語句f=min;使指針變量f指向min函數,語句
z=min(x,y);可寫成:z=(*f)(x,y);
2、回調函數
回調函數就是一個經過函數指針調用的函數。若是把函數的指針做爲參數傳遞給另外一個函數時,當這個指針被用爲調用它所指向的函數時,就說這個回調函數。回調函數能夠象普通函數同樣被程序調用,可是隻有它被看成參數傳遞給被調函數時才能稱做回調函數。
一、爲何要使用回調函數
由於能夠把調用者與被調用者分開,調用者不關心誰是被調用者,全部它需知道的,只是存在一個具備某種特定原型、某些限制條件的被調用函數
以下程序:
經過回掉函數來求取數組中的最大值,
#include<iostream> using namespace std; int max(int arr[], int n); void process(int*p, int n, int(*p1)(int arr[], int n)); void main() { int a[4] = { 10, 8, 12, 9 }; int n = 4; cout << "The Max="; process(a, n, max); } int max(int arr[], int n) { int i; int max1 = arr[0]; for (i = 0; i < n; i++) { if (max1 < arr[i]) { max1 = arr[i]; } } return (max1); } void process(int*p, int n, int(*p1)(int arr[], int n)) { int result; result = (*p1)(p, n); cout << result << endl; }