http://www.jb51.net/article/83013.htm
2016
指針函數(shù)一般是指返回指針的函數(shù);
函數(shù)指針是表示指向函數(shù)開始地址的指針:
首先要了解函數(shù)的調(diào)用過程:
函數(shù)可以用r = (*fun)(5);來調(diào)用,說明函數(shù)名其實是一個指針,
通過(*fun)來尋址。所以我們就可以定義一個指針
所以,給函數(shù)指針賦值也有兩種方式;
同樣,通過函數(shù)指針調(diào)用函數(shù)的方式也有兩種:
也就是說,除了聲明的地方,fun()與(*fun)()的作用是一樣的。
這樣,也就讓C語言容易實現(xiàn)類似于回調(diào)函數(shù)的結(jié)構(gòu):
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 | #include <stdio.h> int funA( int i) { return i + 1; } int funB( int i) { return i - 1; } void fun( int (*funP)( int ), int i) { printf ( "%d\n" , funP(i)); } int main( int argc, char **argv) { int (*funP)( int ); //聲明指針 funP = funA; //給指針賦值 //funP = funB; //給指針賦值 fun(funP, 5); //調(diào)用 return 0; } |
在fun()函數(shù)里,它做的只是在某個時候調(diào)用一個funP指針指向的函數(shù),至于是哪個函數(shù),在fun函數(shù)的定義處還無從得知;直到將funA賦給函數(shù)指針funP,funP具體要做什么功能,才得以確定。
也就是說,main函數(shù)決定fun函數(shù)需要幫它實現(xiàn)什么函數(shù)代碼,但是fun何時調(diào)用以及是否調(diào)用main給他的函數(shù),那是由fun()來決定。