### 回调函数举例 #### 一、回调函数概述 在计算机编程中,回调函数是一种通过函数指针调用的函数。它不是由该函数的实现方直接调用,而是在特定事件或条件发生时由另一方调用的。简单来说,就是将一个函数作为参数传递给另一个函数,在适当的时机被调用执行。 #### 二、回调函数在C/C++中的应用实例 本例通过定义回调函数并在主函数中进行调用来演示回调函数的基本用法。下面详细介绍代码中的各个部分: #### 三、代码解析 ##### 1. 定义回调函数类型 ```c++ typedef int(CALLBACK *PFCALLKING)(int Paragram1, int Paragram2); ``` 这里定义了一个名为 `PFCALLKING` 的函数指针类型,它可以指向一个接受两个整型参数并返回整型值的函数。`CALLBACK` 是一个修饰符,表明这个函数可以被Windows API函数调用。尽管在这个示例中它不直接影响函数的行为,但在实际的Windows编程中,这个关键字指示编译器使用标准的调用约定。 ##### 2. 定义回调函数 ```c++ int CALLBACK FunTestAdd(int Paragram1, int Paragram2); int CALLBACK FunTestSub(int Paragram1, int Paragram2); ``` 这里定义了两个回调函数 `FunTestAdd` 和 `FunTestSub`,它们都接受两个整型参数,并返回整型值。这两个函数分别实现了加法和减法运算,并打印出结果。 ##### 3. 测试回调函数 ```c++ int TestCallBack(PFCALLKING Func) { ptest = Func; (*ptest)(121, 28); return 0; } ``` `TestCallBack` 函数接受一个 `PFCALLKING` 类型的参数,即一个指向回调函数的指针。函数内部首先将传入的函数指针赋值给全局变量 `ptest`,然后通过解引用 `ptest` 调用回调函数并传入参数。这一步骤实现了回调函数的功能:`ptest` 指向的函数将在适当的时候被调用。 ##### 4. 回调函数的具体实现 ```c++ int CALLBACK FunTestAdd(int Paragram1, int Paragram2) { int Paragram3; Paragram3 = Paragram1 + Paragram2; printf("The Paragram3 is: %d", Paragram3); getchar(); return 0; } int CALLBACK FunTestSub(int Paragram1, int Paragram2) { int Paragram3; Paragram3 = Paragram1 - Paragram2; printf("The Paragram3 is: %d", Paragram3); getchar(); return 0; } ``` 这两个函数实现了简单的加法和减法运算。通过 `printf` 函数打印计算结果,并使用 `getchar()` 阻塞程序执行,以便用户查看输出结果。 ##### 5. 主函数 ```c++ int main() { TestCallBack(FunTestAdd); // TestCallBack(FunTestSub); } ``` 在 `main` 函数中,我们调用了 `TestCallBack` 函数,并传入了 `FunTestAdd` 函数的地址。这意味着 `FunTestAdd` 将作为回调函数被调用。注释掉的行则展示了如何调用另一个回调函数 `FunTestSub`。 #### 四、总结 通过以上代码示例,我们可以看到回调函数在C/C++中的基本使用方法。回调函数提供了一种灵活的方式来扩展和定制程序行为,尤其是在处理异步操作、事件驱动编程以及与库交互时非常有用。这种机制允许开发者定义特定的行为,并将其作为参数传递给其他函数,从而实现在特定条件下自动调用这些行为的目的。
#include "stdafx.h"
#include <windows.h>
typedef int (CALLBACK* PFCALLKING)(int Paragram1, int Paragram2 );//声明回调函数类型
int CALLBACK FunTestAdd(int Paragram1, int Paragram2 );//声明回调函数原型1
int CALLBACK FunTestSub(int Paragram1, int Paragram2 );//声明回调函数原型2
PFCALLKING ptest = 0;
int TestCallBack(PFCALLKING Func);
int TestCallBack(PFCALLKING Func)//调用者函数
{
ptest=Func;
(*ptest)(121,28);
return 0;
}
int CALLBACK FunTestAdd(int Paragram1, int Paragram2 )//回调函数定义
{
int Paragram3;
Paragram3=Paragram1+Paragram2;
printf("The Paragram3 is: %d", Paragram3);
getchar();
return 0;
}
int CALLBACK FunTestSub(int Paragram1, int Paragram2 )//回调函数定义
{
int Paragram3;
Paragram3=Paragram1-Paragram2;
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 新建 Microsoft Word 文档
- (176102016)MATLAB代码:考虑灵活性供需不确定性的储能参与电网调峰优化配置 关键词:储能优化配置 电网调峰 风电场景生成 灵活性供需不
- SINAMICS S120驱动第三方直线永磁同步电机系列视频-配置和优化.mp4
- (175601006)51单片机交通信号灯系统设计
- Starter SINAMICS S120驱动第三方直线永磁同步电机系列视频-调试演示.mp4
- (174755032)抽烟、烟雾检测voc数据集
- 基于滑膜控制的差动制动防侧翻稳定性控制,上层通过滑膜控制产生期望的横摆力矩,下层根据对应的paper实现对应的制动力矩分配,实现车辆的防侧翻稳定性控制,通过通过carsim和simulink联合仿真
- 伺服系统基于陷波滤波器双惯量伺服系统机械谐振抑制matlab Simulink仿真 1.模型简介 模型为基于陷波滤波器的双惯量伺服系统机械谐振抑制仿真,采用Matlab R2018a Simul
- (175989002)DDR4 JESD79-4C.pdf
- lanchaoHunanHoutaiQiantai