当前位置: 首页 > news >正文

函数指针(函数作为参数传递给其他函数)

函数也有地址,函数的地址是存储其机器码的内存的开始的地址,并且函数的地址就是其函数名。因此我们可以将函数作为参数传递给其他函数。正如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。

结果:

 

相关文章:

  • 2023考研推荐新闻传播专业入门可以看的好书
  • 解决Long类型web前端精度丢失问题
  • Docker服务编排
  • 为什么自动化营销对于独立站运营来说很重要?
  • 服务器模型选择
  • 使用Android studio开发一个数独游戏APP 系列第二讲
  • MySQL中的时间类型
  • linux的基础指令
  • Docker容器中安装Mysql和Redis等全过程(以在阿里云服务器中的Docker安装Mysql和Redis为例)
  • java---SPFA算法---判断负权回路(每日一道算法2022.8.31)
  • 操作系统(Linux)
  • 基础 | 并发编程 - [LockSupport]
  • Uboot命令应用
  • kettle-实现不同数据库之间的数据交换
  • OPPO小布4.0:软件定义硬件,智能定义“助手”
  • ES6指北【2】—— 箭头函数
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【5+】跨webview多页面 触发事件(二)
  • Android优雅地处理按钮重复点击
  • Material Design
  • node 版本过低
  • python学习笔记-类对象的信息
  • uva 10370 Above Average
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 大整数乘法-表格法
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • - 概述 - 《设计模式(极简c++版)》
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 巧用 TypeScript (一)
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 译自由幺半群
  • 原生Ajax
  • 最简单的无缝轮播
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 如何正确理解,内页权重高于首页?
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #单片机(TB6600驱动42步进电机)
  • ( 10 )MySQL中的外键
  • (06)金属布线——为半导体注入生命的连接
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (C语言)球球大作战
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二)linux使用docker容器运行mysql
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (离散数学)逻辑连接词
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)原始图像数据和PDF中的图像数据
  • .Net Remoting常用部署结构