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 条件表达式的值 ...
随机推荐
- sh.exe": grunt: command not found
今天在git命令行工具中使用 grunt的时候,总是提示我找不到grunt命令,如: sh.exe": grunt: command not found 但是我运行 npm install ...
- UVa 11076 (有重元素的排列) Add Again
n个可重复的元素的排列一共有 = All种,其中 假设这些数依次为ai,每种数字有mi个. 从右往左考虑第d位数(d≥0),第i个数字出现的次数为,那么这个数字对所求答案的贡献为 其实可以先一次求出个 ...
- 图形数据库、NOSQL和Neo4j
简介 在众多不同的数据模型里,关系数据模型自80年代就处于统治地位,而且有不少实现,如Oracle.MySQL和MSSQL,它们也被称为关系数据库管理系统(RDBMS).然而,最近随着关系数据库使用案 ...
- fancybox 点击 js脚本判断验证,fancybox的宽度高度设置
当我们在使用fancybox做弹出窗口的时候,可能在弹窗之前就需要判断一些验证条件,例如我这里有个案例,用户必须先得勾选一个 那么怎么做呢?我们用到fancybox的一个onStart方法就可以了 $ ...
- 【Java学习笔记】数组使用
package aaa; public class aaa { public static void main(String args[]) { int a[]={1,2,3,4}; for(int ...
- [总结]FFMPEG视音频编解码零基础学习方法--转
ffmpeg编解码学习 目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe 2 ffplayexe 3 ffprobeexe ...
- 使用源代码安装lnmp
一.安装nginx前,安装pcre. # tar zxvf pcre-8.12.tar.gz# ./configure# make# make install 二.安装nginx # tar zxvf ...
- Ejabberd源码解析前奏--配置
一.基本配置 配置文件将在你第一次启动ejabberd时加载,从该文件中获得的内容将被解析并存储到内部的ejabberd数据库中,以后的配置将从数据库加载,并且任何配置文件里的命令都会被添加到 ...
- android moveTaskToback 应用退到后台,类似最小化
方法:public boolean moveTaskToBack(boolean nonRoot) activity里有这个方法,参数说明如下: nonRoot=false→ 仅当activity为t ...
- Mybaits+SpringMVC项目(含代码生成工具源码)
大家下载下来修改数据库配置应该就能运行起来,里面有一个SM的简单案例了,还有说明文件. 运行效果 工具类可以生成Springmvc+mybatis的相关类和配置文件,并具有增删查改的功能, ...