C语言-函数作为参数传入其他函数
在C语言编程时,有时会遇到其他逻辑不变,其中有一个内部函数改为了另一个内部函数的情况。这个时候,我们可以将其封装为函数,并且将内部函数作为封装函数的参数传入。
例如,我们举一个简单的例子(例子很差,呜呜呜,但应该可以说明问题的),实际情况比这个复制很多:
#include <stdio.h>
void Delay(int delay_time)
{
for (int i = delay_time; i != 0; i--);
}
void Add(int a, int b)
{
int res = 0;
res = a + b;
printf("res = %d\r\n", res);
}
void Sub(int a, int b)
{
int res = 0;
res = a - b;
printf("res = %d\r\n", res);
}
void AddPrintf(int a, int b)
{
Delay(1000);
Add(a, b);
Delay(1000);
}
void SubPrintf(int a, int b)
{
Delay(1000);
Sub(a, b);
Delay(1000);
}
void main()
{
AddPrintf(2, 1);
SubPrintf(2, 1);
}
我们可以看到上面函数void AddPrintf(int a, int b)和void SubPrintf(int a, int b)的区别在于函数的第3行res = Add(a, b)和res = Sub(a, b)这个时候我们就可以将函数int Add(int a, int b)和int sub(int a, int b)作为参数输入,将void AddPrintf(int a, int b)和void SubPrintf(int a, int b)合并为一个函数,代码如下:
#include <stdio.h>
typedef void (*Func)(int, int);
void Delay(int delay_time)
{
for (int i = delay_time; i != 0; i--);
}
void Add(int a, int b)
{
int res = 0;
res = a + b;
printf("res = %d\r\n", res);
}
void Sub(int a, int b)
{
int res = 0;
res = a - b;
printf("res = %d\r\n", res);
}
void AddSubPrintf(Func fun, int a, int b)
{
Delay(1000);
fun(a, b);
Delay(1000);
}
void main()
{
AddSubPrintf(Add, 2, 1);
AddSubPrintf(Sub, 2, 1);
}
但现在还不知道如何实现不同个数或者类型参数的函数时,如何实现函数指针的调用。