如何理解函数指针

如何理解函数类型C++

  • 定义函数类型
  • 定义一个函数指针类型
  • 直接调用函数指针

定义函数类型

typedef int (MyFunction)(int a, int b);

可以理解成定义了一个具有2个int类型的传入参数以及返回一个int类型的变量的函数类型===>这只是对于函数类型的定义
如果要声明一个函数指针我们需要用类型名称 *变量名称
那么可以更加直观的理解成为函数名称就是MyFunction类型
那么定义的函数指针就可以写成:

MyFunction *Pointer_Myfunction;

这里强调可以向 int类型指的是整型变量的类型名 那么针对于 具有2个int类型的传入参数以及返回一个int类型的变量的函数 这种可以称为一个函数类型的一种类型来说 也需要有一个类型名 那么括号内的MyFunction就可以当成一种函数类型名称来定义函数指针

定义一个函数指针类型

typedef int(*function_pointer)(int a, int b);

运用typedef定义了一个具有2个int类型的传入参数以及返回一个int类型的变量的函数指针类型 那么根据上面的黑字,我们能够清晰的理解为function_pointer就可以代表这种函数指针类型的类型名称
因此对于函数指针类型的定义可以理解为:

function_pointer direct_function_pointer = &add;/*其中add是自定义函数*/

直接调用函数指针

直接定义一个函数指针类型的变量

函数指针本质是一个指针变量,指向这个函数,函数指针理解起来就是指向函数的指针
因此 需要先进性声明一个具有该类型的函数的指针

int (*pointer_function)(int a,int b);

*这种往往不好理解 通常可以等价于理解基本类型的指针声明进行
int pointer

类比声明一个int类型的指针pointer等价于声明一个int ()(int a,int b)类型的函数指针pointer_function,因此对于下一步的赋值往往可以

	PointerFunction = &add;PointerFunction(3, 4);

这样可鞥更加方便理解和吸收 这部分比较抽象,请大家批评指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT 中 QTimer 类 备查

基础 // 指定了父对象, 创建的堆内存可以自动析构 QTimer::QTimer(QObject *parent nullptr);// 根据指定的时间间隔启动或者重启定时器, 需要调用 setInterval() 设置时间间隔 void QTimer::start();// 启动或重新启动定时器,超时间隔为msec毫秒。 void QTimer::…

韩语语法中에和로/으로区别,柯桥发音入门韩语培训学校

에和로/으로在行动的去向与到达或涉及的地点一致时,二者可以互换。 但是에表示到达或涉及的具体地点,而로/으로表示的时动作指向的方向或经过的地点。 在只表示去向而不表示具体地点时,只能用로/으로,而在只表示具体地点而不表示方…

2023.12.2 做一个后台管理网页(左侧边栏实现手风琴和隐藏/出现效果)

2023.12.2 做一个后台管理网页(左侧边栏实现手风琴和隐藏/出现效果) 网页源码见附件,比较简单,之前用很多种方法实现过该效果,这次的效果相对更好。 实现功能: (1)实现左侧边栏的手…

摩根士丹利:人工智能推动增长

摩根士丹利(NYSE:MS)将人工智能战略整合到其财富管理业务中,标志着竞争性金融格局迈出了变革性的一步。该公司的人工智能计划,包括与 OpenAI 合作开发人工智能聊天机器人,促进了其财富部门的显着增长。值得…

MuleSoft 中的细粒度与粗粒度 API

API 设计是一个令人着迷的话题。API 设计的一个重要方面是根据 API 的特性和功能确定正确的“大小”。所有建筑师都必须在某个时候解决过这个问题。在本文中,我将尝试对我们在获得“正确的”粒度 API 之前需要考虑的各种参数进行一些深入的探讨: 可维护…

Doris 数据导入四:Binlog Load 方式

Binlog Load提供了一种使Doris增量同步用户在Mysql数据库的对数据更新操作的CDC(Change Data Capture)功能。 1 适用场景 INSERT/UPDATE/DELETE支持。 过滤Query。 暂不兼容DDL语句。 2 基本原理 在第一期的设计中,Binlog Load需要依赖canal作为中间媒介,让canal伪造成一个…

【数据库】数据库基于封锁机制的调度器,使冲突可串行化,保障事务和调度一致性

封锁使可串行化 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更…

Linux查看计算机处理器相关的信息

采用命令lscpu。部分结果如下:

MicroPython标准库

MicroPython标准库 arraybinascii(二进制/ASCII转换)builtins – 内置函数和异常cmath – 复数的数学函数collections – 集合和容器类型errno – 系统错误代码gc – 控制垃圾收集器hashlib – 散列算法heapq – 堆队列算法io – 输入/输出流json – JSON 编码和解码math – 数…

详解Spring中BeanPostProcessor在Spring工厂和Aop发挥的作用

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

【开源】基于Vue+SpringBoot的音乐平台

项目编号: S 055 ,文末获取源码。 \color{red}{项目编号:S055,文末获取源码。} 项目编号:S055,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首…

Vue安装及环境配置详细教程

一、下载node.js 访问node.js官网:Download | Node.js 选择Windows Installer (.msi)的64-bit进行下载。 在E盘新建一个文件夹,取名为nodejs,也可以在其他盘符新建。 在安装node.js时,点击Change...,进行切换盘符安…

使用 STM32 微控制器读取光电传感器数据的实现方法

本文介绍了如何使用 STM32 微控制器读取光电传感器数据的实现方法。通过配置和使用STM32的GPIO和ADC功能,可以实时读取光电传感器的模拟信号并进行数字化处理。本文将介绍硬件连接和配置,以及示例代码,帮助开发者完成光电传感器数据的读取。 …

<JavaEE> 什么是线程安全?产生线程不安全的原因和处理方式

目录 一、线程安全的概念 二、线程不安全经典示例 三、线程不安全的原因和处理方式 3.1 线程的随机调度和抢占式执行 3.2 修改共享数据 3.3 关键代码或指令不是“原子”的 3.4 内存可见性和指令重排序 四、Java标准库自带的线程安全类 一、线程安全的概念 线程安全是指…

vue3高雅的使用useDialog

在Vue 3中,我们可以使用useDialog自定义指令来高雅地实现对话框的功能。以下是一个简单的示例: 首先,我们需要创建一个名为useDialog.js的文件,并在其中定义我们的自定义指令: // useDialog.js import { ref } from …

无人机助力电力设备螺母缺销智能检测识别,python基于YOLOv7开发构建电力设备螺母缺销小目标检测识别系统

传统作业场景下电力设备的运维和维护都是人工来完成的,随着现代技术科技手段的不断发展,基于无人机航拍飞行的自动智能化电力设备问题检测成为了一种可行的手段,本文的核心内容就是基于YOLOv7来开发构建电力设备螺母缺销检测识别系统&#xf…

Android 13 - Media框架(21)- ACodec(三)

这一节我们将继续来学习 ACodec 的剩余部分。 enum {kFlagIsSecure 1,kFlagPushBlankBuffersToNativeWindowOnShutdown 2,kFlagIsGrallocUsageProtected 4,kFlagPreregisterMetadataBuffers 8,};enum {kVi…

spark的安装与使用:一键自动安装

使用shell脚本一键下载、安装、配置spark(单机版) 1. 把下面的脚本复制保存为/tmp/install_spark.sh文件 #!/bin/bash# sprak安装版本 sprak_version"2.4.0" # sprak安装目录 sprak_installDir"/opt/module" # hadoop安装路径&…

测试类运行失败:TestEngine with ID ‘junit-jupiter‘ failed to discover tests

背景:原本我的项目是可以运行的,然后我用另外一台电脑拉了下来,也是可以用的,但是很奇怪,用着用着就不能用了。报了以下错误: /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home/bin/java …

org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder 实现密码加密 验证 代码示例

BCryptPasswordEncoder 是 Spring Security 提供的用于加密和验证密码的实现类。它使用强大的 BCrypt 散列函数来存储密码的散列值,提供了一种安全的密码存储方法。以下是一个简单的示例代码,演示如何使用 BCryptPasswordEncoder 进行密码加密和验证&…