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

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(使用前将#替换为@)

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

随机推荐

  • 嵌入式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 中形式上会复杂一些 声明函数指针 如下我们声明了一