http://9195095.blog.51cto.com/9185095/1771729
2016
一、函數(shù)指針
函數(shù)的目標(biāo)碼有一個入口地址,這個入口地址就對應(yīng)函數(shù)的指針。函數(shù)的指針能賦給一個指向特定函數(shù)類的指針變量,并能通過指向函數(shù)的指針變量調(diào)用它所指向的函數(shù)。
定義指向函數(shù)的指針變量的一般形式為
返回值類型 (*指針變量名)(形參列表)
例如:
int (*p)();//定義p是一個指向函數(shù)的指針變量,其函數(shù)返回值為int型。
定義了指向函數(shù)的指針變量,就可向它賦某函數(shù)的入口地址。函數(shù)名本身就是函數(shù)入口地址常量,當(dāng)一個指向函數(shù)的指針變量指向某個函數(shù)時,就可用它調(diào)用它所指的函數(shù)。一般形式的函數(shù)調(diào)用為
函數(shù)名(實參表)
改用指向函數(shù)的指針變量調(diào)用該函數(shù),寫為
(*指針變量名)(實參表)
例如:求兩個整數(shù)中小者的函數(shù)min(a,b )返回int型值,語句f=min;使指針變量f指向min函數(shù),語句
z=min(x,y);可寫成:z=(*f)(x,y);
二、回調(diào)函數(shù)
回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果把函數(shù)的指針作為參數(shù)傳遞給另一個函數(shù)時,當(dāng)這個指針被用為調(diào)用它所指向的函數(shù)時,就說這個回調(diào)函數(shù)。回調(diào)函數(shù)可以象普通函數(shù)一樣被程序調(diào)用,但是只有它被當(dāng)作參數(shù)傳遞給被調(diào)函數(shù)時才能稱作回調(diào)函數(shù)。
1、為什么要使用回調(diào)函數(shù)
因為可以把調(diào)用者與被調(diào)用者分開,調(diào)用者不關(guān)心誰是被調(diào)用者,所有它需知道的,只是存在一個具有某種特定原型、某些限制條件的被調(diào)用函數(shù)
如下程序:
通過回掉函數(shù)來求取數(shù)組中的最大值,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #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; } |
聯(lián)系客服