函数指针与回调函数

(1) 

1分钟学会函数指针与回调函数(上)_哔哩哔哩_bilibili

#include <QCoreApplication>
#include <stdio.h>int sum(int x,int y){
return x+y;
}
int difference(int x,int y){
return x-y;
}
int product(int x,int y){
return x*y;
}int main(int argc, char *argv[])
{QCoreApplication app(argc, argv);int a=5;int b=8;int (*p_func)(int,int);p_func=sum;printf("sum's address=%p\n",sum);printf("func_ptr=%p\n",p_func);printf("%d+%d=%d\n",a,b,sum(a,b));printf("%d+%d=%d\n",a,b,p_func(a,b));return app.exec();
}
sum's address=00401659
func_ptr=00401659
5+8=13
5+8=13

函数指针func_ptr指向的地址为00401659

函数名的首地址是00401659

函数名可以被看作一个常量,它保存了函数的内存地址

函数的内存地址,存储了函数开始执行的位置

(2) 

C语言 | 函数指针作为函数的参数_函数指针作为参数_嵌入式大杂烩的博客-CSDN博客

#include <QCoreApplication>
#include <stdio.h>typedef int (*fun_t)(int,int);
int calculate(int a,int b,fun_t operation)
{int result;result=operation(a,b);return result;
}
int add2(int a,int b)
{return a+b;
}int main(int argc, char *argv[])
{QCoreApplication app(argc, argv);int result;int a=192,b=48;result=calculate(a,b,add2);printf("%d+%d=%d\n",a,b,result);return app.exec();
}

关键:

typedef int (*fun_t)(int, int);

fun_t指向一个带两个int类型的形参int类型的返回值的函数。

使用关键字typedef int(*)(int,int)进行重命名为fun_t。

函数指针可以作为参数传递给另一个函数。

这时函数指针的使用就像普通的常量和变量

函数指针作为参数传递的时候,接收参数传递的函数

通常需要根据指针调用对应的函数

(3)

函数指针做函数参数 使用总结及其意义_函数指针作为函数的参数_AI浩的博客-CSDN博客

函数名是函数体的入口地址

(1)可通过函数类型定义函数指针:FuncType* pointer;

(2)可直接定义:type (*pointer)(parameter list);

pointer:函数指针变量名

type:函数的返回值类型

parameter list:指向函数的参数列表。

#include <QCoreApplication>
#include <iostream>
using namespace std;
int add(int a,int b)
{return a+b;
}int main(int argc, char *argv[])
{QCoreApplication app(argc, argv);int sum=add(1,2);cout<<"sum:"<<sum<<endl;//声明一个函数类型{typedef int(MyFuncType)(int a,int b);MyFuncType * myFuncVar=NULL;myFuncVar=add;int sum1=myFuncVar(2,4);cout<<"sum1:"<<sum1<<endl;}//声明一个函数指针类型。{typedef int(*PFuncType)(int a,int b);PFuncType myFunc=NULL;myFunc=&add;int sum2=myFunc(3,5);cout<<"sum2:"<<sum2<<endl;}//定义一个函数指针,指向一个函数的入口地址{int(*MYPFUNC)(int a,int b);MYPFUNC =add;int sum3=MYPFUNC(10,5);cout<<"sum3:"<<sum3<<endl;}return app.exec();
}

sum:3
sum1:6
sum2:8
sum3:15

 思考:

myFunc=&add;

这里为什么要取地址?

    {typedef int(*PFuncType)(int a,int b);PFuncType myFunc=NULL;myFunc=&add;int sum2=myFunc(3,5);cout<<"sum2:"<<sum2<<endl;}{typedef int(*PFuncType)(int a,int b);PFuncType myFunc=NULL;myFunc=add;int sum2=myFunc(3,5);cout<<"sum2:"<<sum2<<endl;}

结果一致,这两者有什么区别?

函数指针做函数参数:

函数指针A指向函数C

函数指针A作为函数参数,传递给一个被调用函数B,被调用函数

就可通过该指针调用外部函数C,这就形成了回调。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

js惰性函数 ----如何让函数执行之后只执行函数某一部分

看下面这份ts代码 实现的效果也很简单,就是将一份文本,复制到剪切板上,未了兼容更多的浏览器(没错说的就是你>ie !),做了一个兼容性判断, 当浏览器支持navigator.clipboard这个api时,就直接调用这个api将文本复制到剪切板中, 如果不支持这个api的话,就执行else里面的代码,这…

在服务器上创建git仓库

1、在服务器上创建git仓库 选择一个创建文件夹的地方&#xff0c;这个地方不会将源码存放在这里&#xff0c;只用于版本控制 # 创建一个专门放置git的文件夹&#xff0c;也可以叫其它名 mkdir git && cd git # 创建自己项目的文件夹&#xff0c;文件夹后面要带 .git…

下划线在键盘上怎么打?这3个方法快收藏!

“我最近的工作中好像很多文件里都有下划线&#xff0c;但是我不知道在键盘上应该怎么把下划线打出来&#xff0c;有没有知道的朋友呀&#xff1f;” 在计算机文档和编程中&#xff0c;下划线是一个常见的特殊字符。很多用户在使用电脑时可能也经常需要用到下划线。但是下划线在…

什么是内容运营?

关于内容运营&#xff0c;在不同种类的公司&#xff0c;侧重点也不一样。 电商平台的内容运营岗更偏内容营销&#xff1b;产品功能比较简单的公司&#xff0c;内容运营和新媒体运营的岗位职责差不多&#xff1b;而内容平台的内容运营更多的是做内容的管理和资源整合。

华为ensp单臂路由及OSPF实验

单臂路由及OSPF实验 1.1实验背景 在这个实验中&#xff0c;我们模拟了一个复杂的网络环境&#xff0c;该网络环境包括多个子网和交换机。这个实验旨在帮助网络工程师和管理员了解如何配置单臂路由和使用开放最短路径优先&#xff08;OSPF&#xff09;协议来实现不同子网之间的…

软考高级架构师下篇-17安全架构设计理论与实践

目录 1. 引言信息安全面临的威胁2. 安全体系架构的范围3.典型安全模型4.信息安全整体架构设计5.数据库系统安全设计6.系统架构脆弱性分析7.安全架构设计实践8. 前文回顾1. 引言 随着科技的发展,信息系统的安全受到诸多方面的威胁,设计信息系统安全架构需要从各个方面考虑,这…

Dev C++安装与运行

参考: https://blog.csdn.net/Keven_11/article/details/126388791 https://www.cnblogs.com/-Wallace-/p/cpp-stl.html 2021年真题要求 2022年真题要求 河南省的考试环境 IDE环境 Dev C 安装 下载 安装 点击OK&#xff0c;选择我接受 修改安装路径为D盘d:\Program Fi…

CorelDRAW Graphics Suite2023绿色中文版本下载教程

CorelDRAW Graphics Suite2023版是领先的一体化软件包&#xff0c;它包括多个程序&#xff0c;如CorelDRAW、Corel PHOTO-PAINT、Corel CAPTURE、Corel Font Manager、Duplexing Wizard等&#xff0c;可全部安装&#xff0c;也可根据实际需要选择进行安装&#xff0c;都是最新版…

vue初体验之-前端工程化-vue项目的创建(超级无敌详细)

一&#xff1a;下载node.js &#xff08;网址如下&#xff1a;Node.js&#xff09; 1.NodeJS安装 2. 选择安装目录 选择安装到一个&#xff0c;没有中文&#xff0c;没有空格的目录下&#xff08;新建一个文件夹NodeJS&#xff09; 3. 验证NodeJS环境变量 NodeJS 安装完毕后…

Web开发-新建Spring Boot项目

目录 Spring Boot 与 Web开发Spring Boot 与 MavenJava 环境搭建下载JDK下载xmapp下载navicat for mysql下载Eclipse配置tomcat配置maven 新建Spring Boot项目 Spring Boot 与 Web开发 Spring Boot 是一种用于简化 Spring 应用程序开发、部署和运行的框架&#xff0c;而 Web 开…

LeetCode01

LeetCode01 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和 为目标值 target 的那两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你…

【计算机网络】网络层和数据链路层

文章目录 IP协议网段划分分类划分法CIDR 方案路由NAT网络地址转换技术IP报文的另外三个参数mac帧ARP协议交换机ICMP代理服务器 IP协议 TCP有将数据 可靠、高效 发给对方的 策略&#xff0c;而IP具有发送的能力&#xff0c;即将数据从A主机送到B主机的 能力 。 用户要的是100%…

医院陪诊系统:改善患者体验的技术创新

医院陪诊系统是一种创新的技术解决方案&#xff0c;旨在提高患者在医疗机构的整体体验。它不仅为患者提供便利&#xff0c;还增加了医疗机构的效率。本文将深入探讨医院陪诊系统的技术创新&#xff0c;包括其关键功能和实现方法。 1. 医院陪诊系统的基本功能 医院陪诊系统的…

Yolov4 学习笔记

Yolov4 学习笔记 损失函数之前损失函数存在的问题GIOUDIOUCIOU BOSSPP netCSP net SAMPAN层mish激活函数 损失函数 666666 之前损失函数存在的问题 之前公式为1-IOU IOU (交集面积) / (并集面积) 如果没有相交&#xff0c;分母为0&#xff0c;那么就无法计算 分母接近零&#…

自学WEB后端05-Node.js后端服务链接数据库redis

嘿&#xff0c;亲爱的小伙伴们&#xff01;&#x1f604; 今天我要给大家分享一个超级方便且高效的 NoSQL 类型数据库——Redis&#xff01;&#x1f4a1; 它可不是一般的关系型数据库哦&#xff0c;而是以键值对形式存储数据的内存数据库。&#x1f4da; 快跟着我一起来学习如…

运动健身行业如何线上获客?

生活水平的提高带来的是居民消费力的上升&#xff0c;生活方式也快速转变&#xff0c;随之而来的健康问题也越来越多&#xff0c;人们开始更加关注自己的身体健康&#xff0c;运动健身行业也越来越热门&#xff0c;平常我们较常见到的营销都是线下营销&#xff0c;那么运动健身…

项目04-基于Docker的Prometheus+Grafana+AlertManager的飞书监控报警平台

文章目录 一.项目介绍1.流程图2.拓扑图3.详细介绍 二.前期准备1.项目环境2.IP划分 三. 项目步骤1.ansible部署软件环境1.1 安装ansible环境1.2 建立免密通道1.3 批量部署docker 2 部署nginx、MySQL以及cadvisor、exporter节点2.1 在nginx节点服务器上面配置nginx、node_exporte…

Linux系统-Ubuntu的下载和安装

第一章 Linux系统-Ubuntu的下载和安装 1.下载Ubuntu ​ 进入https://cn.ubuntu.com/download中文官网下载iso映像文件&#xff1a; 2.安装Ubuntu 1.打开虚拟机&#xff0c;点击创建新的虚拟机&#xff1a; 2.选择“典型”&#xff0c;然后点击“下一步”&#xff1a; 3.选择…

YUM 升级 PHP7

文章目录 YUM 升级 PHP71. 查看当前 PHP 信息2. YUM 安装 PHP73. 查看 PHP 版本4. 启动PHP-FPM YUM 升级 PHP7 参考地址&#xff1a;网站地址 参考地址&#xff1a;网站地址 1. 查看当前 PHP 信息 # 查看 PHP 版本信息 php -v# 查看 yum 源中 PHP 信息 yum list | grep php2. …

前端开发 vs. 后端开发:编程之路的选择

文章目录 前端开发&#xff1a;用户界面的创造者1. HTML/CSS/JavaScript&#xff1a;2. 用户体验设计&#xff1a;3. 响应式设计&#xff1a;4. 前端框架&#xff1a; 后端开发&#xff1a;数据和逻辑的构建者1. 服务器端编程&#xff1a;2. 数据库&#xff1a;3. 安全性&#…