目录
回调函数
回调函数就是⼀个通过函数指针调用的函数。
如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。
回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的⼀方调用的,用于对该事件或条件进行响应。
回调函数的应用
i,简化代码逻辑
//使⽤回调函数改造前
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a / b;
}
int main()
{
int x, y;
int input = 1;
int ret = 0;
do
{
printf("******************\n");
printf(" 1:add 2:sub ****\n");
printf(" 3:mul 4:div ****\n");
printf("******************\n");
scanf("%d", &input);
switch (input)
{
case 1:
printf("输⼊操作数:");
scanf("%d %d", &x, &y);
ret = add(x, y);
printf("ret = %d\n", r);
break;
case 2:
printf("输⼊操作数:");
scanf("%d %d", &x, &y);
ret = sub(x, y);
printf("ret = %d\n", r);
break;
case 3:
printf("输⼊操作数:");
scanf("%d %d", &x, &y);
ret = mul(x, y);
printf("ret = %d\n", r);
break;
case 4:
printf("输⼊操作数:");
scanf("%d %d", &x, &y);
ret = div(x, y);
printf("ret = %d\n", r);
break;
case 0:
printf("退出程序\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
return 0;
}
经过简化,可以优化代码逻辑,更加清晰易懂。
//使⽤回到函数改造后
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a / b;
}
//回调函数,根据接收的不同函数的地址,调用不同的函数
void calc(int(*pf)(int, int))
{
int ret = 0;
int x, y;
printf("输⼊操作数:");
scanf("%d %d", &x, &y);
ret = pf(x, y);
printf("ret = %d\n", ret);
}
int main()
{
int input = 1;
do
{
printf("*****************\n");
printf(" 1:add 2:sub ****\n");
printf(" 3:mul 4:div ****\n");
printf("*****************\n");
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
calc(add);
break;
case 2:
calc(sub);
break;
case 3:
calc(mul);
break;
case 4:
calc(div);
break;
case 0:
printf("退出程序\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
return 0;
}
ii,实现上下机之间的通讯
我们可以约定不同的ID,当接收方接到不同的ID信息时,根据ID信息调用不同的函数,这样就实现了通过回调函数来实现上下机之间的通信。
其实在 i 中,我们就通过打印信息约定了:
操作数 | 1 | 2 | 3 | 4 |
操作 | 加法 | 减法 | 乘法 | 除法 |
在提前约定好的前提下,上位机发送一串数据信息,下位机通过解析其中的ID信息,得到ID,ID不同,调用的函数不同,做出的反应也不同。
本文仅仅是提供2个例子,并不能让你详细了解回调函数的所有功能。
~完
未经作者同意进制转载