C/C++函数指针
函数指针是指向函数的指针变量它存储的是函数在内存中的地址。通过函数指针我们可以间接调用函数。函数指针声明语法返回类型 (*指针名) 参数列表;/***********************基本示例***********************/ #include stdio.h // 定义一些简单的函数 int add(int a, int b) { return a b; } int subtract(int a, int b) { return a - b; } int multiply(int a, int b) { return a * b; } int main() { // 声明函数指针 int (*operation)(int, int); // 将函数地址赋给指针 operation add; printf(5 3 %d\n, operation(5, 3)); operation subtract; printf(5 - 3 %d\n, operation(5, 3)); operation multiply; printf(5 * 3 %d\n, operation(5, 3)); return 0; }/**********************函数指针数组**********************/ #include stdio.h int add(int a, int b) { return a b; } int subtract(int a, int b) { return a - b; } int multiply(int a, int b) { return a * b; } int main() { // 函数指针数组 int (*operations[])(int, int) {add, subtract, multiply}; char operators[] {, -, *, /}; int a 10, b 5; for (int i 0; i 4; i) { printf(%d %c %d %d\n, a, operators[i], b, operations[i](a,%20b)); } return 0; }/**********************作为函数参数传递**********************/ #include stdio.h // 回调函数示例 void processArray(int arr[], int size, void (*callback)(int)) { for (int i 0; i size; i) { callback(arr[i]); } } void printDouble(int x) { printf(%d , x * 2); } void printSquare(int x) { printf(%d , x * x); } int main() { int numbers[] {1, 2, 3, 4, 5}; int size sizeof(numbers) / sizeof(numbers[0]); printf(原数组的两倍: ); processArray(numbers, size, printDouble); printf(\n); printf(原数组的平方: ); processArray(numbers, size, printSquare); printf(\n); return 0; }/**********************返回函数指针的函数**********************/ #include stdio.h int add(int a, int b) { return a b; } int multiply(int a, int b) { return a * b; } // 返回函数指针的函数 int (*getOperation(char op))(int, int) { switch (op) { case : return add; case *: return multiply; default: return NULL; } } int main() { int (*op)(int, int); op getOperation(); if (op ! NULL) { printf(3 4 %d\n, op(3, 4)); } op getOperation(*); if (op ! NULL) { printf(3 * 4 %d\n, op(3, 4)); } return 0; }/**********************C中的函数指针**********************/ #include iostream #include functional // 传统函数指针 int add(int a, int b) { return a b; } // 类成员函数指针示例 class Calculator { public: int multiply(int a, int b) { return a * b; } static int divide(int a, int b) { return b ! 0 ? a / b : 0; } }; int main() { // 1. 传统函数指针 int (*func1)(int, int) add; std::cout 3 5 func1(3, 5) std::endl; // 2. std::function (C11) std::functionint(int, int) func2 add; std::cout 4 6 func2(4, 6) std::endl; // 3. Lambda表达式 auto func3 [](int a,int b) { return a - b; }; std::cout 10 - 3 func3(10, 3) std::endl; // 4. 成员函数指针 Calculator calc; int (Calculator::*memberFunc)(int, int) Calculator::multiply; std::cout 4 * 5 (calc.*memberFunc)(4, 5) std::endl; // 5. 静态成员函数指针 int (*staticFunc)(int, int) Calculator::divide; std::cout 20 / 4 staticFunc(20, 4) std::endl; return 0; }

相关新闻

从路由器转发到代码实现:图解分组交换时延计算全流程

从路由器转发到代码实现:图解分组交换时延计算全流程

从路由器转发到代码实现:图解分组交换时延计算全流程 你是否曾经盯着网络时延的计算公式,感觉每个字母都认识,但组合起来却像天书?或者,在准备技术面试时,被问到“一个数据包从A到B要多久”,你明…

2026/7/3 10:20:42 阅读更多 →
SQLyog保姆级教程:从安装到实战操作MySQL数据库(附常见问题解决)

SQLyog保姆级教程:从安装到实战操作MySQL数据库(附常见问题解决)

从零到一:用SQLyog图形化工具高效驾驭MySQL数据库 如果你刚开始接触数据库,面对黑底白字的命令行窗口,是不是觉得有点无从下手?我刚开始学MySQL的时候,也是这种感觉,敲错一个字母就得重来,效率低…

2026/7/3 4:17:03 阅读更多 →
5分钟搞定Flink1.19本地部署:用JDK17运行WordCount示例教程

5分钟搞定Flink1.19本地部署:用JDK17运行WordCount示例教程

5分钟搞定Flink 1.19本地部署:用JDK 17运行WordCount示例教程 对于很多开发者来说,Apache Flink 这个名字既熟悉又陌生。熟悉是因为它作为流处理领域的标杆,在各种技术分享和招聘要求中频频出现;陌生则是因为其庞大的生态和看似复…

2026/7/3 17:14:31 阅读更多 →

最新新闻

内蕴时空正则化(ISR)与曲率引擎工程:从递归自指宇宙学到星舰动力系统

内蕴时空正则化(ISR)与曲率引擎工程:从递归自指宇宙学到星舰动力系统

内蕴时空正则化(ISR)与曲率引擎工程:从递归自指宇宙学到星舰动力系统 作者:方见华 单位:世毫九实验室 学科分类:理论物理 → 广义相对论与量子引力交叉;工程物理 → 星际推进系统 论文类型&…

2026/7/4 2:45:40 阅读更多 →
FaTRQ系统:分层残差量化加速ANNS向量搜索

FaTRQ系统:分层残差量化加速ANNS向量搜索

1. 项目概述:FaTRQ系统与ANNS技术挑战在当今数据密集型应用中,近似最近邻搜索(Approximate Nearest Neighbor Search, ANNS)已成为语义检索、推荐系统和欺诈检测等任务的核心技术。随着大型语言模型(LLM)和…

2026/7/4 2:43:38 阅读更多 →
基于UPT的实时脑组织形变预测技术解析

基于UPT的实时脑组织形变预测技术解析

1. 神经外科手术模拟中的实时脑组织形变预测技术在神经外科手术训练中,医生需要精确掌握脑组织对外科器械操作的动态响应特性。传统基于有限元分析(FEM)的物理仿真虽然精度较高,但单次计算耗时长达1.68秒,远不能满足实时交互的需求&#xff0…

2026/7/4 2:41:38 阅读更多 →
从设计到交付:揭秘PCB制造全流程中的关键工艺与质量把控

从设计到交付:揭秘PCB制造全流程中的关键工艺与质量把控

1. PCB制造全流程概览第一次拿到Gerber文件时,我和大多数硬件工程师一样,以为PCB制造就是个"文件进、板子出"的黑箱过程。直到亲眼目睹深圳某工厂的产线才恍然大悟——那些看似简单的绿色板子,竟要经历20多道精密工序。举个实际案例…

2026/7/4 2:39:37 阅读更多 →
Bielik-11B-v3模型架构与多语言优化技术解析

Bielik-11B-v3模型架构与多语言优化技术解析

1. Bielik-11B-v3模型架构解析1.1 深度扩展技术实现Bielik-11B-v3采用深度扩展(Depth Upscaling)技术,在保持11B参数量的前提下实现了性能突破。这种技术通过增加Transformer层的深度而非宽度来扩展模型容量,具体实现包含三个关键…

2026/7/4 2:37:36 阅读更多 →
JoyAI-Image-Edit:AI图像编辑的革新与实战指南

JoyAI-Image-Edit:AI图像编辑的革新与实战指南

1. JoyAI-Image-Edit:重新定义AI图像编辑的边界当京东正式开源JoyAI-Image-Edit时,整个计算机视觉领域都为之震动。这不仅仅是一个普通的图像编辑工具——它代表着AI从二维平面修图向三维空间理解的质变飞跃。想象一下,你不再局限于调整颜色或…

2026/7/4 2:37:36 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻