回调函数也是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。回调函数可以象普通函数一样被程序调用,但是只有它被当作参数传递给被调函数时才能称作回调函数。如果被调函数被赋了不同的值给该参数,那么调用者将调用不同地址的函数。赋值可以发生在运行时,这样使你能实现动态绑定。
C语言:
-
typedef int (*CallBackFun) (char *p);
-
int Afun(char *p) {return 0;}
-
int call(CallBackFun pCallBack, char *p){pCallBack(p); return 0;}
-
int call2(char *p, int (*ptr)()) {(*ptr)(p); return 0;}
-
typedef int (*CallBackFun) (char *p);
-
int Afun(char *p) {return 0;}
-
int call(CallBackFun pCallBack, char *p){pCallBack(p); return 0;}
-
int call2(char *p, int (*ptr)()) {(*ptr)(p); return 0;}
-
-
char *p = "hello";
-
call(Afun,p);
-
call2(p,Afun);
-
-
char *p = "hello";
-
call(Afun,p);
-
call2(p,Afun);
C语言的标准库函数中很多地方就采用了回调函数来让用户定制处理过程。如常用的快速排序函数、二分搜索函数等。
举例:
-
#include
-
#include
-
-
int list[5]= {54, 21, 11, 67, 22};
-
int sort_fucntion(const void *a, const void *b);
-
-
int main(int argc, const char * argv[])
-
{
-
qsort((void *)list, 5, sizeof(list[0]), sort_fucntion);
-
-
for (int x = 0; x < 5; x++) {
-
printf("%i\n", list[x]);
-
-
}
-
-
return 0;
-
}
-
-
int sort_fucntion(const void *a, const void *b)
-
{
-
return *(int *)a - *(int *)b;
-
-
}
-
#include
-
#include
-
-
int list[5]= {54, 21, 11, 67, 22};
-
int sort_fucntion(const void *a, const void *b);
-
-
int main(int argc, const char * argv[])
-
{
-
qsort((void *)list, 5, sizeof(list[0]), sort_fucntion);
-
-
for (int x = 0; x < 5; x++) {
-
printf("%i\n", list[x]);
-
-
}
-
-
return 0;
-
}
-
-
int sort_fucntion(const void *a, const void *b)
-
{
-
return *(int *)a - *(int *)b;
-
-
}
Xcode运行结果:
P.S.:
qsort函数原型:
void qsort (void * base, size_t num, size_t size, int (*compar) (const void *, const void *));
bsearch函数原型:
void * bsearch (const void * key, const void * base, size_t num, size_t size, int (*compar) (const void *, const void *));
详细用法请戳:
http://blog.csdn.net/wuming22222/article/details/39345705