• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C/C++回调函数介绍

C/C++回调函数介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++调用c函数,c c++ c#区别,c和c++的区别,c语言和c++有什么区别,c/c++等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理。本文将要解释什么是回调函数、它们有什么好处、为什么要使用它们等等问题,在开始之前,假设你已经熟知了函数指针。

什么是回调函数?

简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。

为什么要使用回调函数?

因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。

如果想知道回调函数在实际中有什么作用,先假设有这样一种情况,我们要编写一个库,它提供了某些排序算法的实现,如冒泡排序、快速排序、shell排序、shake排序等等,但为使库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑;或者,想让库可用于多种数据类型(int、float、string),此时,该怎么办呢?可以使用函数指针,并进行回调。

回调可用于通知机制,例如,有时要在程序中设置一个计时器,每到一定时间,程序会得到相应的通知,但通知机制的实现者对我们的程序一无所知。而此时,就需有一个特定原型的函数指针,用这个指针来进行回调,来通知我们的程序事件已经发生。实际上,SetTimer() API使用了一个回调函数来通知计时器,而且,万一没有提供回调函数,它还会把一个消息发往程序的消息队列。

另一个使用回调机制的API函数是EnumWindow(),它枚举屏幕上所有的顶层窗口,为每个窗口调用一个程序提供的函数,并传递窗口的处理程序。如果被调用者返回一个值,就继续进行迭代,否则,退出。EnumWindow()并不关心被调用者在何处,也不关心被调用者用它传递的处理程序做了什么,它只关心返回值,因为基于返回值,它将继续执行或退出。

不管怎么说,回调函数是继续自C语言的,因而,在C++中,应只在与C代码建立接口,或与已有的回调接口打交道时,才使用回调函数。除了上述情况,在C++中应使用虚拟方法或函数符(functor),而不是回调函数。

下面是自己写的一个简单的回调函数,相比其他的那些复杂的代码,这个更容易理解:

int main()
{
 int n;
 printf("请输入一个正整数\n");
 scanf("%d",&n);

 myCallback(perfect,n);
 return 0;

}
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C/C++字符串查找函数全面了解
  • C/C++杂记 虚函数的实现的基本原理(图文)
  • C/C++函数调用栈的实现方法
  • C/C++常用函数易错点分析
  • C/C++函数调用的几种方式总结
  • C/C++回调函数介绍

相关文章

  • 2017-05-28c++ 构造函数的初始化列表
  • 2017-05-28简单谈谈C++ 头文件系列之(bitset)
  • 2017-05-28计时器的time_t和clock_t 的两种实现方法(推荐)
  • 2017-05-28简单谈谈C++ 头文件系列之(iosfwd)
  • 2017-05-28C++实现动态分配const对象实例
  • 2017-05-28C 语言环境设置详细讲解
  • 2017-05-28基于C++类型重定义的使用详解
  • 2017-05-28CString,字符串,整数等相互转换方法(推荐)
  • 2017-05-28掌握C++编程中反斜杠续行符的使用方法
  • 2017-05-28C++实现大数乘法算法代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c++实现二叉查找树示例
    • C语言编程时常犯十八个错误小结
    • C++ 简单实现MFC ListControl 点击列头排序
    • 详解C++中的this指针与常对象
    • C++获得其他程序窗体控件中信息的方法
    • C++流操作之fstream用法介绍
    • C++用Dijkstra(迪杰斯特拉)算法求最短路径
    • C++中实现把表的数据导出到EXCEL并打印实例代码
    • 基于内核线程的创建、使用和退出以及延时宏的补充说明介绍
    • C++直接初始化与复制初始化的区别深入解析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有