函数也有地址,函数的地址是存储其机器码的内存的开始的地址,并且函数的地址就是其函数名。因此我们可以将函数作为参数传递给其他函数。正如python中可以将函数轻易的传递给其他函数一样,但是C++中形式上会复杂一些。

声明函数指针:

如下我们声明了一个函数指针pf,稍后我么将让其指向一个函数:

void (*pf)(int)

我们可以将(*pf)看成一个整体,这样其实上述代码与声明一个函数很像,只是将函数名换成了(*pf),因此我们可以记住:声明函数指针就是将函数声明中的函数名换成(*指针名)。

需要注意的是,函数指针要指向的函数的返回值与参数列表必须与函数指针一致,即根据上面代码中的函数指针,我们指向的函数返回值为void,且应有一个int型参数。

将函数指针指向函数:

void my_func();
void (*pf)()
pf = my_func;

上面代码,我们声明一个函数my_func以及一个函数指针pf,并通过pf=my_func来将my_func函数的地址给pf来实现将函数指针指向函数。

函数指针的调用:

函数指针接收到函数后有两种方法可以调用:

以上面函数指针pf为例:

1、(*pf)()

2、直接pf()

第二种方式更为简洁,然而使用第一种方式更能够清楚的让别人知道你在使用函数指针。

用函数指针将函数作为参数传递给函数:

#include <iostream>
using namespace std;void print_func(void (*pf)())
{(*pf)();cout << "print is done!" << endl;
}void my_func()
{cout << "the call of my_func" << endl;
}int main()
{print_func(my_func);system("pause");return 0;
}

上面代码中print_func函数中的函数指针接受my_func函数:void (*pf)() = my_func。

结果:

函数指针(函数作为参数传递给其他函数)相关推荐

  1. c++ 函数指针_进化论——从函数指针到被结构封装的函数指针及参数的应用举例...

    ↑↑↑ 点击上方公众号名称关注,不放过任何转变的机会. ✎ 编 者 悟 语 借口再小也会瓦解人的意志. 文 章 导 读 今天带大家用下函数指针,然后将函数指针和函数参数封装到结构体中,接着将数据用动态 ...

  2. 使用 typedef 定义函数指针,更优雅的使用函数指针

    简介 关于函数指针的介绍,这里就不做过多说明了,不了解的同学可以看看这篇博客: https://blog.csdn.net/afei__/article/details/80549202 使用 typ ...

  3. 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为參数,泛型函数...

     1.指针数组 数组里面的每一个元素都是指针. 指针数组的案比例如以下: 易犯错误: 2.数组指针 归根结底还是指针,仅仅是取*的时候可以取出一整个数组出来. 数组指针:(一个指针指向了数组.一般 ...

  4. 使用函数指针来编写一个名叫sort的函数,它用于对一个任意类型的数组进行排序。

    编写一个名叫sort的函数,它用于对一个任意类型的数组进行排序.为了使函数更为通用,它的    其中一个参数必须是一个指向比较回调函数的指针,该回调函数由调用程序提供.比较函数接受    两个参数,也 ...

  5. c语言函数指针 的定义方法,C语言 函数指针一(函数指针的定义)

    //函数指针 #include #include #include //函数指针类型跟数组类型非常相似 //函数名就是函数的地址,函数的指针,对函数名进行&取地址操作,还是函数名本身,这是C语 ...

  6. 《C和指针》—— 第13章 函数指针的作用1:回调函数2(与模板结合,简化代码)

    注意:此为原创文章,未经同意,请勿随意转载. 目录 1. 问题与思路 2. 具体实现 3. 结果截图 1. 问题与思路 Q:实现一个与类型无关的比较函数,且考虑模板,精简代码 A:声明一个函数指针,函 ...

  7. C++:函数指针进阶(四):函数对象operator()

    C++中的  operator() 有两大主要作用: 1:Overloading --------重载() 操作符 2: Casting------实现对象类型转化 1:Overloading重载() ...

  8. 几种用函数指针方式来访问类成员函数的方法总结

    前提:假设成员函数不访问类的成员变量. 环境:DEV-C++,别的环境有可能编译无法通过. 代码如下: #include <iostream> using namespace std; c ...

  9. 【 C 】初识函数指针

    函数指针,顾名思义,也就是指针,不过这个指针是指向函数的指针. 在[ C ]高级指针话题之高级声明的演进 这篇博文中提到了函数指针的声明等,摘出来: 接下来的一个声明更有趣,但也更容易让人疑惑: in ...

  10. C++函数指针与回调函数

    [转自]cnblogs.com/chenyuming507950417/archive/2012/01/02/2310114.html 今天讨论下C/C++中的回调函数. 在理解"回调函数& ...

最新文章

  1. 通俗易懂地讲解 Java 的注解
  2. s10 linpus linux,上月国外最受关注NB排行 超便携本占优
  3. python -m xxx.py 模块启动与直接启动python xxx.py 的区别,就是对sys.path的修改不同,导致可以调用的模块范围就不一样
  4. 如何判断一个对话机器人有多智能?
  5. 【错误记录】Java 中 ArrayList 排序 ( 使用 Comparator 接口时注意 compare 返回值是 -1 和 +1 )
  6. 14-python基础3-数据类型
  7. mysql连接串指定编码_MYSQL创建数据库时候直接指定编码和排序规则
  8. 设计模式-----单例模式优缺点及使用场景
  9. android context.java_Android / Java类范围和Context
  10. 用Java打开一个网页
  11. python脚本-记录Python脚本的运行日志的方法
  12. yum离线下载rpm包
  13. 《微店赚钱一册通 ——开店+营销+推广 实战全攻略》一一1.5 微店有哪些优势...
  14. JSON Viewer丨Json格式查看器
  15. js监听移动端横屏和竖屏状态
  16. Android Studio应用Freeline光速编译APK
  17. 《富爸爸穷爸爸》读书笔记
  18. JavaScript实现EAN13条码校验
  19. HTML5和CSS3新特性有哪些
  20. 生成Solr增量索引配置xml

热门文章

  1. 迈锐宝1.5t噪音测试软件,迈锐宝1.5T动力够用不?车友作测贡献新车极速案例
  2. 山东大学2023操作系统实验2
  3. 软考考点之Mccabe度量计算及路径覆盖
  4. MATLAB-medfilt2函数的实现源代码
  5. 十句中英文情感感言!
  6. 计算机专业出国留学邮件怎么写,计算机专业留学个人陈述范文.pdf
  7. python怎么交换两个变量的值_python交换两个变量的值方法
  8. 茧数SCRM产品介绍系列:私域流量池
  9. 运动算法 一范数 二范数 敏感轴
  10. Python学习目录