目录
回调函数
回调函数的应用
i,简化代码逻辑
ii,实现上下机之间的通讯
回调函数
回调函数就是⼀个通过函数指针调用的函数。
如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。
回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的⼀方调用的,用于对该事件或条件进行响应。
回调函数的应用
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个例子,并不能让你详细了解回调函数的所有功能。
~完
未经作者同意进制转载