c++指针函数的使用——回调函数
/*
函数指针
函数也是有地址的
所谓函数指针,就是指向函数的指针,函数指针也是一个变量,可以指向不同的函数。同时通过函数指针可以调用其指向函数,从而使函数的调用更加灵活。
函数指针的用途
*/
#include<iostream>
using namespace std;
int add(int x, int y);
int add(int x, int y)
{
return x + y;
}
int main()
{
//cout << &add;//将函数add的地址输出
//定义函数指针
int(*pf)(int x, int y);
//函数指针名*pf两侧的括号不能省略,否则就成了一个返回“int *”类型的函数声明。
//正是括号使得“*”和标识符“pf”组成一个整体,表示pf是一个指针
pf=add;//pf=&add;给函数指针赋值
//int x = pf(3, 4);//通过函数指针pf调用函数add (使用函数指针不必像使用一般指针那样解引用)
, );//函数指针解引用 这样做的好处可以明确指明pf是一个函数指针,否则只有看到定义才能分辨出pf是一个函数还是一个指针函数
cout << x << endl;
typedef int(*FUN_PTR)(int a, int b);
//有时候函数的参数列表和返回类型比较复杂,每次定义这样的函数指针都要重写一遍比较繁琐。因此可以用类型定义运算符typedef为该函数定义一个简单的类型名。
//有了这样一个类型名之后就可以用来定义函数指针变量,而不用重写函数的参数列表和返回类型
FUN_PTR fun_ptr = add;
//虽然相对于定义函数指针变量,定义函数指针类型只是多了一个关键字。但也正因为如此,FUN_FTR也不再是一个变量,而变成了一个类型。同普通指针一样,如果
//没有明确的初始化,则函数指针的值将是一个随机数,使用这样的指针非常危险。因此在使用函数指针之前对其进行初始化或着赋一个初值,即将一个函数名赋给
//该函数指针变量
cout << fun_ptr(, )<<endl;
system("pause");
;
}
/*
指针函数的使用——回调函数
*/
#include<cstdlib>
#include<iostream>
using namespace std;
typedef bool(*FUN_PTR)(int a, int b);//定义函数指针类型
/*
* 排序函数
* 参数:数组,数组的长度,指针函数(不同的排序方式)
* 返回:排序好的数组
*/
void sort(int ary[], int n, FUN_PTR pf);
void sort(int ary[], int n, FUN_PTR pf)
{
; i < n - ; i++)//遍历第1个到n-1个元素
{
int val = ary[i];
; j < n; j++)//遍历当前元素之后的所有元素
{
if (pf(val, ary[j]))//调用回调函数
{
val = ary[j];
ary[j] = ary[i];
ary[i] = val;
}
}
}
}
bool my_less(int a, int b);//比较两个参数的大小
bool my_less(int a, int b)
{
return a < b;
}
bool my_big(int a, int b);//比较两个参数的大小
bool my_big(int a, int b)
{
return a > b;
}
int main()
{
cout << "----------使用函数指针确定排序标准-----------";
] = {,,,,,,};
sort(ary, , my_big);//sort(ary,3,&my_less);//sort(ary,3,big);
; i < ; i++)
{
cout << ary[i] << " ";
}
cout << endl;
system("pause");
;
}
c++指针函数的使用——回调函数的更多相关文章
- C++-函数与指针的关系(回调函数)
1.函数类型 C语言中的函数有自己特定的类型 函数的类型由返回值,参数类型和参数个数共同决定 ★ int add(int i, int j)的类型为int(int, int) C语言中通过typede ...
- JS中的匿名函数、回调函数、匿名回调函数
工欲善其事必先利其器 在学习JavaScript设计模式一书时,遇到了“匿名回调函数”这个概念,有点疑惑,查找了些资料重新看了下函数的相关知识点之后,对这个概念有了认识.九层之台,起于垒土.在熟悉这一 ...
- golang中匿名函数的应用-回调函数-闭包
package main import ( "fmt" "strconv" ) type funcType func(int, int) int // 自定义函 ...
- mongoose的update函数中的回调函数是必须要传的吗
mongoose中的update的回调函数是必须要传的,如果不传,则不会更新. 例如这样写是不会更新的 tagModel.update({name:tagName},{$inc:{total:1}}, ...
- $.ajax({ }) 里面的success函数不执行 | 回调函数返回的值 用对象,下标,键值对访问不到时
原因一般是 dataType:'json' 数据类型设置成了json ,去掉这个设置即可 $.ajax({ }) 回调函数返回的值 用对象,下标,键值对访问不到时,考虑是否返回数据为字符串 考虑是 ...
- LUA使用虚函数与使用回调函数
------------------虚函数overload-------------------------- --回调:寻路中格子坐标改变 CHero.OnSearchToCellsChange = ...
- 在Java中如何编写回调函数,以及回调函数的简单应用
import static java.lang.System.out; import static java.lang.System.err; import java.util.logging.Lev ...
- Promise对象的resolve回调函数和reject回调函数使用
Promise是ES6中用来结局回调地狱的问题的但是并不能帮我们减少代码量 Promise是一个构造函数 new Promise() 得到一个Promise一个实例 在Promise上有两个函数分别是 ...
- js for 循环中有异步函数时,回调函数总是最后一步的值。
原因:for循环执行时不会等待异步函数执行. 解决方法: 1.改为递归函数(暂时不会). 2.构建一个自执行函数传参(匿名函数) 参考::https://www.cnblogs.com/csuwuji ...
随机推荐
- SpringBoot(二):设置springboot同一接口程序启动入口
根据上一篇文章中搭建了一个springboot简单工程,在该工程中编写HelloWordController.java接口类,并在该类中写了一个main函数,做为该类的接口服务启动入口.此时如果新增多 ...
- Struts(二十四):短路验证&重写实现转换验证失败时短路&非字段验证
短路验证: 若对一个字段使用多个验证器,默认情况下会执行所有的验证.若希望前面的验证器没有通过,后面的验证器就不再执行,可以使用短路验证. 1.如下拦截器,如果输入字符串,提交表单后,默认是会出现三个 ...
- 分析ajax请求抓取今日头条关键字美图
# 目标:抓取今日头条关键字美图 # 思路: # 一.分析目标站点 # 二.构造ajax请求,用requests请求到索引页的内容,正则+BeautifulSoup得到索引url # 三.对索引url ...
- 基于angularJS搭建的管理系统
前言 angularJS搭建的系统,是一年前用的技术栈,有些地方比较过时,这里只是介绍实现思路 前端架构 工程目录 项目浅析 项目依赖包配置package.json { "name" ...
- Linux OpenGL 实践篇-1 OpenGL环境搭建
本次实践所使用环境为CentOS 7. 参考:http://www.xuebuyuan.com/1472808.html OpenGL开发环境搭建: 1.opengl库安装 opengl库使用mesa ...
- python3+dlib人脸识别及情绪分析
一.介绍 我想做的是基于人脸识别的表情(情绪)分析.看到网上也是有很多的开源库提供使用,为开发提供了很大的方便.我选择目前用的比较多的dlib库进行人脸识别与特征标定.使用python也缩短了开发周期 ...
- 音频降噪算法 附完整C代码
降噪是音频图像算法中的必不可少的. 目的肯定是让图片或语音 更加自然平滑,简而言之,美化. 图像算法和音频算法 都有其共通点. 图像是偏向 空间 处理,例如图片中的某个区域. 图像很多时候是以二维数据 ...
- [POI 2015]Kinoman
Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...
- hdu 5880 AC自动机
Family View Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- 【BZOJ1835】【ZJOI2010】基站选址
原题传送门 Description 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di.需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立基站的费用为Ci.如果在距 ...