回调函数和普通函数有什么区别?
普通函数与回调函数主要是在调用方式上有区别:
1、对普通函数的调用:调用程序发出对普通函数的调用后,程序执行立即转向被调用函数执行,直到被调用函数执行完毕后,再返回调用程序继续执行。从发出调用的程序的角度看,这个过程为“调用-->等待被调用函数执行完毕-->继续执行”。
2、对回调函数调用:调用程序发出对回调函数的调用后,不等函数执行完毕,立即返回并继续执行。这样,调用程序执和被调用函数同时在执行。当被调函数执行完毕后,被调函数会反过来调用某个事先指定函数,以通知调用程序:函数调用结束。这个过程称为回调(Callback),这正是回调函数名称的由来。
扩展资料
一般函数(General function)是相对于比较特殊,比较少见的函数而言的,在任一学科内,指的是作用能力比较基层,使用比较普遍的函数,但同时它也是构成某整个作用域中不可缺少的元素。列如:c语言中的printf(),scanf()函数就是c语言中的一般函数,它们用于各类数据输出和输入,是很常用的的库函数,基础但很重要。
参考资料百度百科-回调函数
普通函数与回调函数主要是在调用方式上有区别:
1、对普通函数的调用:调用程序发出对普通函数的调用后,程序执行立即转向被调用函数执行,直到被调用函数执行完毕后,再返回调用程序继续执行。从发出调用的程序的角度看,这个过程为“调用-->等待被调用函数执行完毕-->继续执行”。
2、对回调函数调用:调用程序发出对回调函数的调用后,不等函数执行完毕,立即返回并继续执行。这样,调用程序执和被调用函数同时在执行。当被调函数执行完毕后,被调函数会反过来调用某个事先指定函数,以通知调用程序:函数调用结束。这个过程称为回调(Callback),这正是回调函数名称的由来。
扩展资料
回调函数机制
⑴定义一个回调函数;
⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
普通函数
函数(function)是一个集合元素到令一个集合元素的对应关系,它起着一种映射和变换的功能,如在数学中,一个集合A, 若对A中的每个元素x,按对应法则f,使B中存在唯一的一个元素A与之对应 , 就称对应法则f是X上的一个函数,记作B=f(x)。广义地说,函数其实是完成某一功能的工具,如在数学中,该功能就是用来实现数学运算的,就是数学函数,故一般函数是完成某一工程中基础工具,起着基础功能,故一般函数就是一个功能区能完成基本功能的工具。
普通函数与回调函数的区别:
对普通函数的调用:
调用程序发出对普通函数的调用后,程序执行立即转向被调用函数执行,直到被调用函数执行完毕后,再返回调用程序继续执行。从发出调用的程序的角度看,这个过程为“调用-->等待被调用函数执行完毕-->继续执行”对回调函数调用:
调用程序发出对回调函数的调用后,不等函数执行完毕,立即返回并继续执行。这样,调用程序执和被调用函数同时在执行。当被调函数执行完毕后,被调函数会反过来调用某个事先指定函数,以通知调用程序:函数调用结束。这个过程称为回调(Callback),这正是回调函数名称的由来。
非要说有区别,就是调用方式
普通函数,被其他函数调用时,是在调用者内部直接写函数名调
回调函数,通常是作为参数传递给调用者,调用者并不知道自己调用的到底是什么
另外有一点,回调函数大多用于多线程的情况
回调函数说白了 就是一个函数 被另一个函数调用,不是吗?
普通函数,回调函数都是被其他函数调用的,不同之处在于调用者是否明确知道自己调用的到底是什么,举个例子:
void func1(){}
void func2(){}
typedef void (*fp)();//申明函数指针,fp表示一个空参数,返回类型void的函数指针
void funcCaller1(){
//此处func1可以看作普通函数
func1();//此处,funcCall1明确知道自己调用了func1
}
void funcCaller2(fp funcPtr){
funcPtr();//此处,funcCall2并不知道自己到底调用的是什么,只知道自己调用了一个空参数的,返回类型是void的函数
}
void funcCaller3(){
//此处,funcCaller2是普通函数,func1是回调函数
funcCaller2(func1);//调用funcCaller2,参数是func1
//此处,funcCaller2是普通函数,func2是回调函数
funcCaller2(func2);//调用funcCaller2,参数是func2
}
大部分情况下通俗地说在其它函数中作为参数使用的函数即为回调函数。
func(var, callback) // 此处callback函数作为参数使用, callback就是回调函数
回调函数与普通函数在本质上都是函数没有任何不同,区别只在于使用方式
#include <stdio.h>
typedef void (*NumCalc)(int ); // 定义函数指针
void changeNum(int x, int y, NumCalc fp);
void firstCalc(int x);
void secondCalc(int x);
int main()
{
changeNum(1, 2, firstCalc);
changeNum(1, 2, secondCalc);
return 0;
}
void changeNum(int incNum, int decNum, NumCalc fp)
{
fp(incNum - decNum);
}
void firstCalc(int result)
{
int otherNum = 10;
printf("result first值为: %d\n", result + otherNum); // 9
}
void secondCalc(int result)
{
int otherNum = 11;
printf("result second值为: %d\n", result - otherNum); // -12
}
通过这段代码可以看出类型为NumCalc并在changeNum中作为参数使用了的函数都可以称为回调函数, 它们与普通函数并没有任何区别, 只是与其它函数使用的方式有些许差别.
这种使用方式可以给应用的设计带来极大的灵活性, 现在举一个类似的应用场景, 比如在不同的子页面点击主页面上的修改按钮, 主页面执行edit函数, 参数为一个函数指针, 可以在每个子页面下实现自己的修改函数并作为回调函数给主页面的edit函数使用, 完成具体的修改事件