C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子
先来不带参数的回调函数例子
#include <iostream>
#include <windows.h> void printFunc()
{
std::cout<<"printFunc"<<std::endl;
} void CallFunc(void (*FuncPoint)())
{
FuncPoint();
} int main(int argc,char* argv[])
{
CallFunc(printFunc);
system("pause");
return 0;
}
然后带参数的回调函数
#include <iostream>
#include <windows.h>
void printFunc(int a)
{
std::cout<<"printFunc : "<<a<<std::endl;
}
void CallFunc(void (*FuncPoint)(int),int a)
{
FuncPoint(a);
} int main(int argc,char* argv[])
{
CallFunc(printFunc,123); system("pause");
return 0;
}
函数指针数组的使用
#include <iostream>
#include <windows.h> void printFunc1(int a)
{
std::cout<<"printFunc1 : "<<a<<std::endl;
} void printFunc2(int a)
{
std::cout<<"printFunc2 : "<<a<<std::endl;
} int main(int argc,char* argv[])
{ void (*funcPointArray[2])(int)={printFunc1,printFunc2}; for (int i=0;i<2;i++)
{
funcPointArray[i](3);
}
system("pause");
return 0;
}
使用TypeDef来简化上面的代码
#include <iostream>
#include <windows.h> typedef void (*FuncPoint)(int); void printFunc1(int a)
{
std::cout<<"printFunc1 : "<<a<<std::endl;
} void printFunc2(int a)
{
std::cout<<"printFunc2 : "<<a<<std::endl;
} int main(int argc,char* argv[])
{ //void (*funcPointArray[2])(int)={printFunc1,printFunc2}; FuncPoint funcPointArray[]={printFunc1,printFunc2}; for (int i=0;i<2;i++)
{
funcPointArray[i](3);
}
system("pause");
return 0;
}
本来我们需要使用:
void (*funcPointArray[2])(int)
其中变量是
funcPointArray[2]
于是 在TypeDef 里 我们用 FuncPoint 来代替这个变量,代替了上面整的一句话。
typedef void (*FuncPoint)(int);
后面使用的时候就用 FuncPoint
FuncPoint funcPointArray[]={printFunc1,printFunc2};
C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子的更多相关文章
- c/c++ main 函数命令行参数的使用
C程序最大的特点就是所有的程序都是用函数来装配的.main()称之为主函数,是所有程 序运行的入口.其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用的是有参函数,则参数在调用 ...
- 函数指针的返回值是指针数组,数组里放的是int;函数指针的返回值是指针数组,数组里放的是int指针
函数指针的返回值是指针数组,数组里放的是int 函数指针的返回值是指针数组,数组里放的是int指针 #include <stdio.h> #include <stdlib.h> ...
- PHP之回调函数传参(解决eval函数拼接对象参数的问题)
在使用Smarty时,定义了一个统一调用控制器的函数,如下: function C($name, $method){//控制器的名称和其中方法的名称 require_once "contro ...
- 关于C#中函数声明带参数的函数
在C#语言的函数中,有一项至关重要的我们称之为参数. 对于参数的含义:要完成一件事,需要知道的额外条件 其语法: static void 函数名(参数列表){ //注释类容} 而其参数列表的语法为: ...
- python 全栈开发,Day12(函数的有用信息,带参数的装饰器,多个装饰器装饰一个函数)
函数的执行时,*打散.函数的定义时,*聚合. from functools import wraps def wrapper(f): # f = func1 @wraps(f) def inner(* ...
- promise对象的回调函数resolve的参数为另一个promise对象
/*如果调用resolve函数和reject函数时带有参数,那么它们的参数会被传递给回调函数. reject函数的参数通常是Error对象的实例,表示抛出的错误: resolve函数的参数除了正常的值 ...
- 【python 】装饰器 (多个参数的函数,带参数的装饰器)【转】
最简单的模板是这样的 #-*-coding:utf-8-*- def outer(func): def inner(): print 'before' func() print 'after' # r ...
- python 装饰器 (多个参数的函数,带参数的装饰器)
最简单的模板是这样的 #-*-coding:utf-8-*- def outer(func): def inner(): print 'before' func() print 'after' # r ...
- 快学Scala 第二课 (apply, if表达式,循环,函数的带名参数,可变长参数,异常)
apply方法是Scala中十分常见的方法,你可以把这种用法当做是()操作符的重载形式. 像以上这样伴生对象的apply方法是Scala中构建对象的常用手法,不再需要使用new. if 条件表达式的值 ...
随机推荐
- TCP建立连接和释放的过程,及TCP状态变迁图
一.TCP报文格式 下面是TCP报文格式图: 重要字段介绍: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2)确认序号:Ack序号,占 ...
- ACM - ICPC World Finals 2013 B Hey, Better Bettor
原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 这题真心的麻烦……程序不长但是推导过程比较复杂,不太好想 ...
- javac编译过程
编译器把一种语言规范转化为另一种语言规范的这个过程需要哪些步骤:
- ASP.NET MVC 学习2、从Controller传递数据到View
参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view 一,Control ...
- 设置mysql的interactive_timeout和wait_timeout的值
1,为什么要重新设置这两个变量的值? 因为如果数据库默认这两个变量的值是8小时(即28800秒)如果在8小时之内没有连接到数据库,等下次再连的时候就会抛连接超时,或连接关闭这样的异 常,但是多连接几次 ...
- eclipse启动出现“An Error has Occurred. See the log file”解决方法
最近在启动eclipse时出现了“An Error has Occurred. See the log file”的错误,点击确定后也不能启动eclipse.查看log文件,出现类似: java.la ...
- windows安装TortoiseGit详细使用教程【基础篇】
标签:tortoisegit 环境:win8.1 64bit 安装准备: 首先你得安装windows下的git msysgit1.9.5 安装版本控制器客户端tortoisegit tortoise ...
- xp重装系统后恢复Linux启动
我的电脑----右键-----属性----高级----启动与恢复故障----设置编辑 [boot loader]timeout=3default=multi(0)disk(0)rdisk(0)part ...
- MyBatis的association示例——MyBatis学习笔记之三
前两篇博文介绍的都是单表映射,而实际上很多时候我们需要用到较复杂的映射.今天学会的association的用法,就是一例,现写出来和大家分享(为简洁起见,ant工程中各文件.目录的布局,以及其它与前面 ...
- Activity与Activity之间,Fragment与Fragment之间通过Bundle传值的研究
一.Fragment与Activity的通讯 在使用fragment的时候,通常的用法都是使用一个activity来管理不同的fragment,所以每个fragment与activity的及时通讯 ...