嵌入式技术
函数指针是指向函数的指针变量。它允许我们将函数作为参数传递给其他函数或将函数作为返回值返回。函数指针的类型与所指向的函数的类型相匹配。
回调函数是一种通过函数指针来实现的机制。在使用回调函数的情况下,我们可以将一个函数的指针传递给另一个函数,然后在后者中调用该函数来完成特定的任务。回调函数常常用于事件处理、异步编程和插件架构等场景。
使用回调函数的一般流程如下:
通过回调函数,我们可以将程序的控制权交给调用方,使得调用方可以根据特定的条件或事件来执行自定义的代码逻辑。这种机制提供了一种灵活的方式来扩展程序的功能和逻辑。
int(*func_ptr)(int,int);
int sum(int x,int y)
{
return x+y;
}
int difference(int x, int y)
{
return x-y;
}
int product(int x, int y)
{
return x*y;
}
#include < stdio.h >
//定义三个函数,它们具有相同的形式参数和返回值
//sum计算两个数相加
int sum(int x, int y)
{
return x+y;
}
//difference计算两个数相减
int difference(int x, int y)
{
return x-y;
}
//product计算两个数相乘
int product(int x, int y)
{
return x*y;
}
//主函数
int main(void)
{
int(*func_ptr)(int,int);//定义有两个整数参数、返回值是整数的函数指针
int a = 5;
int b = 8;
func_ptr = sum; //将func_ptr分别指向函数sum
printf("sum's address=%pn",sum); //打印sum中存储的地址
printf("func_ptr=%pn",func_ptr); //打印func_ptr存储的值
printf("%d+%d=%dn",a,b,sum(a,b)); //直接调用sum函数
printf("%d+%d=%dn",a,b,func_ptr(a,b)); //通过func_ptr调用sum函数
func_ptr = difference; //将func_ptr分别指向函数difference
printf("difference's address=%pn",difference); //打印difference中存储的地址
printf("func_ptr=%pn",func_ptr); //打印func_ptr存储的值
printf("%d-%d=%dn",a,b,difference(a,b)); //直接调用difference函数
printf("%d-%d=%dn",a,b,func_ptr(a,b)); //通过func_ptr调用difference函数
func_ptr = product; //将func_ptr分别指向函数product
printf("sum's address=%pn",product); //打印product中存储的地址
printf("func_ptr=%pn",func_ptr); //打印func_ptr存储的值
printf("%d*%d=%dn",a,b,product(a,b)); //直接调用product函数
printf("%d*%d=%dn",a,b,func_ptr(a,b)); //通过func_ptr调用product函数
return0;
}
sum's address=00401500
func_ptr=00401500
5+8=13
5+8=13
difference's address=0040150D
func_ptr=0040150D
5-8=-3
5-8=-3
sum's address=00401518
func_ptr=00401518
5*8=40
5*8=40
//该函数有三个参数,函数指针func_ptr和整数a、b
int compute_func(int (*func_ptr)(int, int),int x, int y)
{
return func_ptr(x,y);
}
int (*func_ptr)(int, int);
//定义三个函数,它们具有相同的形式参数和返回值
//sum计算两个数相加
int sum(int x, int y)
{
return x+y;
}
//difference计算两个数相减
int difference(int x, int y)
{
return x-y;
}
//product计算两个数相乘
int product(int x, int y)
{
return x*y;
}
#include < stdio.h >
//定义三个函数,它们具有相同的形式参数和返回值
//sum计算两个数相加
int sum(int x, int y)
{
return x+y;
}
//difference计算两个数相减
int difference(int x, int y)
{
return x-y;
}
//product计算两个数相乘
int product(int x, int y)
{
return x*y;
}
//自定义实现3乘以x+5乘以y
int my_func(int x, int y)
{
return3*x+5*y;
}
//该函数有三个参数,函数指针func_ptr和整数a、b
//与sum、difference、product形式相同
int compute_func(int(*func_ptr)(int,int),int x,int y)
{
return func_ptr(x,y); //直接返回func_ptr的调用结果
}
//主函数
int main(void)
{
int a = 5;
int b = 8;
//通过调用compute_func函数计算a和b的和、差、积
printf("%d+%d=%dn",a,b,compute_func(sum,a,b));
printf("%d-%d=%dn",a,b,compute_func(difference,a,b));
printf("%d*%d=%dn",a,b,compute_func(product,a,b));
//通过调用compute_func函数计算3*a+5*b的值
printf("3*%d+5*%d=%dn",a,b,compute_func(my_func,a,b));
return0;
}
//传入相同的参数不同的函数名得到不同的结果
5+8=13
5-8=-3
5*8=40
3*5+5*8=55
总结一下使用函数指针的好处:
函数指针提供了一种灵活和强大的机制,使得函数可以像其他数据一样被处理和传递,从而增强了程序的可扩展性、可维护性和灵活性。
全部0条评论
快来发表一下你的评论吧 !