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

20250526-C++基础-函数指针

C++基础-函数指针

函数指针,顾名思义就是指向函数的指针,用一个变量来存储函数的地址,可以通过这个变量(指针)间接访问函数。(可以把函数指针名看作函数名来进行函数调用)。代码及说明如下:

#include <iostream>
#include<functional>using namespace std;class Test
{
public:int mul(int, int);
};int Test::mul(int a, int b) 
{return a * b;
}int add(int num1, int num2)
{int sum = num1 + num2;return  sum;
}int sub(int num1, int num2)
{return num1 - num2;
}int calc(int num1, int num2, int(*func)(int, int)) 
{return func(num1, num2);
}
int main()
{//1、获取函数地址与获取函数值cout << add << endl;    //00007FF7288B1465cout << sub << endl;   //00007FF7BDC51474cout << add(4, 5) << endl;  //9//2、使用函数指针//语法:返回类型 (*指针名称)(参数列表);cout << "*****************2" << endl;int (*fp1)(int, int) = add;cout << (*fp1)(2, 3) << endl;   //5cout << fp1(2, 3) << endl;  //5//3.使用typedef简化函数指针cout << "*****************3" << endl;typedef int(*Fp)(int, int);Fp fp2 = add;cout << fp2(6, 9) << endl;  //15//4.函数指针作为参数,将要执行的函数地址传过去cout << "*****************4" << endl;cout << calc(8, 2, add) << endl;    //10cout << calc(8, 2, sub) << endl;    //2//5.用functiona包装函数cout << "*****************5" << endl;function<int(int, int)> fp3 = add;cout << fp3(1, 2) << endl;  //3//6.数组函数指针cout << "*****************6" << endl;int(*fps[])(int, int) = { add, sub };for (auto fp : fps)cout << fp(4, 2) << endl;   //6   2function<int(int, int)> fps2[] = { add, sub };for (auto fp : fps2) cout << fp(2, 1) << endl;   //3     1//7.类的成员函数指针cout << "*****************7" << endl;int(Test:: * fp4)(int, int) = &Test::mul;Test test;cout << (test.*fp4)(3, 4) << endl;  //12}

输出结果:

00007FF701C9142E
00007FF701C910FA
9
*****************2
5
5
*****************3
15
*****************4
10
6
*****************5
3
*****************6
6
2
3
1
*****************7
12

在这里插入图片描述

http://www.lryc.cn/news/2386551.html

相关文章:

  • 软考 系统架构设计师系列知识点之杂项集萃(73)
  • 大模型训练中的GPU作用解析
  • Flutter Web 3.0革命:用WebGPU实现浏览器端实时光追渲染,性能提升300%
  • DeepSeek-V3-0526乍现
  • Java设计模式之观察者模式:从基础到高级的全面解析
  • C/C++---类型转换运算符
  • STM32 I2C 通信协议
  • 【后端高阶面经:Elasticsearch篇】38、Elasticsearch 高可用架构解析:分片容灾、Translog 调优与双集群
  • 5月26日复盘-自注意力机制
  • *HTML `<script>` 标签中的核心属性解析:掌控脚本加载与执行的艺术
  • 聊一聊接口测试如何设计有效的错误响应测试用例
  • 记忆上传与自我同一性的哲学-技术综合分析
  • 人工智能工程师学习路线总结(下)
  • Vue:axios(POST请求)
  • 企业级调度器LVS (面试版)
  • 从OTA双雄「共舞」,透视旅游持续繁荣背后的结构性跃迁
  • 华为OD机试真题——虚拟理财游戏(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • Vue-01(Vue CLI创建项目以及文件配置说明)
  • 华为云Flexus+DeepSeek征文 | DeepSeek-V3/R1商用服务开通体验全流程及使用评测
  • redis列表类型
  • 人工智能数学基础实验(一):智能推荐系统实战
  • uni-app学习笔记十二-vue3中组件传值(对象传值)
  • Vue.js教学第十四章:Vuex模块化,打造高效大型应用状态管理
  • Ubuntu/Linux 服务器上调整系统时间(日期和时间)
  • win11 禁用/恢复 内置笔记本键盘(保证管用)
  • 精度不够?光纤激光尺0.2ppm误差解锁微米级制造
  • Android 16系统源码_自由窗口(一)触发自由窗口模式
  • sqli-labs第十八关——POST-UA注入
  • 流式优先架构:彻底改变实时数据处理
  • WebSockets 在实时通信中的应用与优化