关于回调函数应用的理解以及小例子
2017-10-26 13:37
211 查看
回调函数做参数,实际上就是定义一个全局函数,在这个函数中完成具体的实现方法;然后在某一个应用方法中,定义一个空方法声明(全局函数的函数指针),类似于声明变量,然后写一个接口函数,将此前声明的全局函数的函数指针以及全局函数所需要的相关参数传递进来,使这个应用方法中的函数指针指向全局函数,然后通过此方法生成的对象就可以调用全局函数了。
函数做参数传递:
简单归纳一下类中调用回调函数思路:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int(*FP)(int num); //宏声明函数指针
int Test(int num) //回调函数
{
for(int i = 0;i<3;i++)
{
printf("test===%d\n",num);
}
return 0;
}
class Caller{
private:
FP fp; //声明函数指针
int Num;
public:
Caller();
~Caller();
void GetFp(FP a,int num);//指针函数的参数要单独传递
void Print();
};
Caller::Caller()
{
Num = 0;
}
Caller::~Caller()
{
}
void Caller::GetFp(FP a,int num)
{
fp = a; //指针传递
Num = num; //参数传递
}
void Caller::Print() //调用函数
{
fp(Num);
}
int main()
{
Caller obj;
obj.GetFp(Test,5);
obj.Print();
return 0;
}
函数做参数传递:
#include <stdio.h> #include <stdlib.h> int Test1() { for(int i = 0;i<3;i++) { printf("test1===\n"); } return 0; } int Test2(int num) { for(int i = 0;i<3;i++) { printf("test2===%d\n",num); } return 0; } void Caller1(int(*ptr)()) //指向函数的指针做参数 { (*ptr)();//相当于调用函数 } void Caller2(int(*ptr)(int num),int num) //函数指针做参数 (函数体与参数的关系) { (*ptr)(num); //传递参数调用函数 } int main() { printf("=========tese1=============\n"); Caller1(Test1); printf("=========tese2=============\n"); Caller2(Test2,30); getchar(); return 0; }
简单归纳一下类中调用回调函数思路:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int(*FP)(int num); //宏声明函数指针
int Test(int num) //回调函数
{
for(int i = 0;i<3;i++)
{
printf("test===%d\n",num);
}
return 0;
}
class Caller{
private:
FP fp; //声明函数指针
int Num;
public:
Caller();
~Caller();
void GetFp(FP a,int num);//指针函数的参数要单独传递
void Print();
};
Caller::Caller()
{
Num = 0;
}
Caller::~Caller()
{
}
void Caller::GetFp(FP a,int num)
{
fp = a; //指针传递
Num = num; //参数传递
}
void Caller::Print() //调用函数
{
fp(Num);
}
int main()
{
Caller obj;
obj.GetFp(Test,5);
obj.Print();
return 0;
}
相关文章推荐
- 关于以太网(Ethernet II)这个网络的个人理解以及应用(1)
- 关于Java序列化和反序列化的理解以及概念和例子
- 关于OC中消息转发机制的理解以及在项目中的实际应用
- 关于OC中消息转发机制的理解以及在项目中的实际应用
- 关于以太网(Ethernet II)这个网络的个人理解以及应用(2)
- 关于回调函数的理解,以及观察者模式,代理模式
- 关于java的synchronized关键字,wait(),notify() 的例子,方便大家快速理解和应用。
- 关于数据库中FK的简单理解以及应用
- Android应用开发中关于this.context=context的理解
- 关于extern以及源文件和头文件的应用
- Oracle数据库应用SQL语句进行分页,以及引申出来对rownum的理解
- 关于IOS8的Autolayout特性的理解以及使用
- 深入理解CUDA线程层次以及关于设置线程数的思考
- 关于扩展运算符中i++和++i,以及基本类型和引用类型的综合应用
- 游戏中关于跳跃的函数图像的推导以及应用
- 数组不是指针——数组地址不能动态分配空间,一个小例子关于指针移动,以及malloc
- 一个典型的例子理解JavaScript作用域以及变量提升
- 关于C中的回调函数的应用
- css基础应用理解以及感悟
- 关于js中单引号(')和双引号(")的使用以及转义的理解