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

2023-11-12

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

结果:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数指针(函数作为参数传递给其他函数) 的相关文章

  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 嵌入式linux闹钟,嵌入式电子闹钟课程设计.doc

    嵌入式系统综合实验 题 目 基于嵌入式的数字闹钟系统设计 学生姓名 秦乙 学 号 20071309087 学 院 电子与信息工程学院 专 业 信息工程 二 一 年 十二 月 二十七 日 目 录 论文标题错误 未定义书签 摘要和关键词错误 未
  • 利用OpenCV的函数matchTemplate()实现在图像中寻找、检索、搜索模板图像【图像模板匹配】

    利用OpenCV的函数matchTemplate 实现在图像中寻找 检索 搜索模板图像 图像模板匹配 在博文 https www hhai cc thread 220 1 1 html 中我们利用直方图的反向投影原理可以寻找图像中具有某个直
  • 绝对干货!初学者也能看懂的DPDK解析

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由Willko发表于云 社区专栏 一 网络IO的处境和趋势 从我们用户的使用就可以感受到网速一直在提升 而网络技术的发展也从1GE 10GE 25GE 40GE 100GE的演变
  • Google pay默认支付(payment)应用之二 -TpHceService默认被disable原因

    根据上篇文章 GooglePay默认支付 payment 应用 之一 我们提到在GmsCore Google play services 核心套件里边声明的TpHceService开机后发现被disabled 那么原因是什么呢 一起来看看吧
  • 宝塔计划 任务执行thinkphp脚本

    cd www wwwroot test com php think content
  • 【持续更新】ubuntu中的git命令

    持续更新 ubuntu中的git命令 git init 初始化本地目录作为本地仓库 git remote add origin xxxxxxx xxxxxxxx是指git地址 本条命令是将本地仓库和远程仓库连接起来 git pull ori
  • VulnHub实战篇六:Me And My Girlfriend靶机渗透记录

    0x00靶机信息 下载地址 下载地址 攻击机ip 172 16 12 137 靶机ip 172 16 12 141 目标 getshell 获取两个flag 并提权至root 0x01过程 首先识别一下目标开启的端口和服务 可以看到目标开启
  • line-height 百分比和数值设置行高

    一 line height的值为百分比 子集元素继承父级元素的距离 1 例如
  • Java Collections singletonMap()方法具有什么功能呢?

    转自 Java Collections singletonMap 方法具有什么功能呢 下文笔者将讲述singletonMap 方法的功能简介说明 如下所示 singletonMap 方法的功能 返回一个不可变的map 里面只包含一个键和值
  • 如何在vscode中使用gdb命令行与打印指针数组

    在debug的程序处于中断状态时 必须是中断状态 可使用 exec command的格式在vscode对应的debug窗口中输出gdb命令 如何打印一个指针数组 以main 函数的指令数组argv为例 可以通过如下指令打印其值 exec x
  • python资本市场财务数据分析_Python对股票财务数据进行可视化分析

    对股票财务数据进行分析是非常必要 但因股票数据量很大 单凭浏览网页或在软件客户端查看是非常浪费精力的一件事 通过Python进行网页数据提取 将财务数据图表化会更加直观 以下代码在Python 3 6环境下通过 注 使用注意 将此代码保存为
  • 一次APM32替换STM32的经历分享

    系列文章目录 这几年相信大家知道STM32系列的芯片价格翻倍的涨 自己玩都快玩不起了 要是用于生产 这得多掏多少钱 所以现在大家都选择了国产芯片 哈哈不能说多差吧 价格你没得说 这是我的一次APM32代替STM32的经历 你是不是也会遇到这
  • java学习笔记8

    Comparable Comparable表示可被排序的 实现该接口的类的对象自动拥有排序功能 对Integer的排序 package com Factory import java util public class Test21 pub
  • clk为什么要用posedge,而不用negedge

    Verilog中典型的counter逻辑是这样的 always posedge clk or negedge reset begin if reset 1 b0 reg inst1 lt 8 d0 else if clk 1 b1 reg
  • 解决BMap is not defined?

    除了上篇文章在配置文件中修改之外 还有其他方法 先重复第一种 module exports entry src main js externals BMap BMap 然后在目标vue文件中调用 import BMap from BMap
  • docker国内镜像源

    Docker中国区官方镜像 https registry docker cn com 网易 http hub mirror c 163 com ustc https docker mirrors ustc edu cn 中国科技大学 htt
  • ESLint: The array literal notation [] is preferable. (no-array-constructor)

    为什么80 的码农都做不了架构师 gt gt gt var xx new Array 改为 var xx 找到一篇不错的文章 总结的不错 https blog csdn net zcfzfc123456789 article details
  • python爬虫-异步爬虫

    注 本文章为学习过程中对知识点的记录 供自己复习使用 也给大家做个参考 如有错误 麻烦指出 大家共同探讨 互相进步 借鉴出处 该文章的路线和主要内容 崔庆才 第2版 python3网络爬虫开发实战 前言 爬虫属于IO密集型任务 例如使用re
  • Windows 命令行

    Windows命令行 1 echo 显示内容 echo 内容 类似log echo on off 打开 关闭回写 echo off 内容 pause 写pause时才进行输出 2 cd 进入目录 cd 内容 path路径 进入到对应的文件夹
  • 函数指针(函数作为参数传递给其他函数)

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