回调函数(C语言)
回调函数这个概念在网上的资料非常的多,一搜一大把,写的比较好的有:
经过学习之后,我对回调函数有了粗浅的认识,归纳总结如下:
一、什么是回调函数
void func1(int a,int b);
void func2(int,void(*func1)(int,int));
那么,func2就是回调函数。
通过上面的定义就应该可以初步的了解到回调函数的定义了,参数中通过函数指针调用了别的函数的函数叫回调函数。func2的参数中有一个函数指针func1,而这个指针指向了另外一个函数func1(int,int)。
(以上是一个非常简单粗糙的定义,仅是为了初步的理解。)
二、为什么要用回调函数?
假设void func1(int,int)函数实现的功能就是为了排序,而func2实现的功能中恰好想应用到排序这个功能。比如想将一串数组排序后再取出最小的一个数。如果使用回调的话,func2就可以直接调用func1了,用func1实现排序而不用管到底func1是用怎样的方法实现的排序。
想要真正的理解一个概念,在项目中直接遇到话会有更深的理解。而我还没有遇到,所以理解就只能在这一层了。
三、代码简单实现:
比如说有个人惹了你,你想给他发一个“你是大傻逼”。想实现一个函数,并且想发几次发几次。
#include<stdio.h> #include<stdlib.h> void function(int);//该函数实现慰问信息的具体实现 void send(int a,void(*func)(int));//发a次慰问信息 int main(void) { send(5,function); return 0; } void function(int a) { int i=0; for(i=0;i<a;i++) { printf("你是大傻逼!!!\n"); } } void send(int a,void(*func)(int)) { func(a); }
以上就是一个非常简单的回调函数的实现。
为了加深理解,可以去看一下C语言中的标准库函数:快速排序、二元搜索等的应用。里面有涉及回调函数的知识。
<span style="font-size:18px;"> #include<stdio.h> #include<stdlib.h> int sort_function(const void* a,const void* b); int list[5]={54,21,11,67,22}; int main(void) { int x; qsort((void*)list,5,sizeof(list[0]),sort_function); for(x=0;x<5;x++) { printf("%i\n",list[x]); } return 0; } int sort_function(const void* a,const void* b) { int* aa=(int *)a,*bb=(int*)b; if(*aa>*bb) { return 1; } if(*aa==*bb) { return 0; } if(*aa<*bb) { return -1; } } </span>
版权声明:本文为博主原创文章,未经博主允许不得转载。