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

【看到哪里写到哪里】C的指针-3(函数指针)

//定义四个函数 加减乘数
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 divide(int a, int b)
{if (b == 0){printf("Error: devision by ZERO!");return 0;}return a / b;
}
//定义指针函数
typedef int (*MathOperation)(int, int);int testFuncPtr()
{//函数指针,申请四个指针;其实也可以直接用数组,不过,实际开发中,用指针的场景更多些。MathOperation *mathOperation;mathOperation = (MathOperation *)malloc(4 * sizeof(MathOperation));//给函数指针赋值mathOperation[0] = &add;mathOperation[1] = &subtract;mathOperation[2] = &multiply;mathOperation[3] = &divide;int a = 10;int b = 2;for (int i = 0; i < 4; i++){//调用函数指针指向不同的函数int result = mathOperation[i](a, b);switch (i){case 0:case 1:case 2:case 3://输出结果,这里有个小技巧printf("%d %c %d = %d\n", a, "+-*/"[i], b, result);break;default:break;}}free(mathOperation);
}输出结果:
10 + 2 = 12
10 - 2 = 8
10 * 2 = 20
10 / 2 = 5

还是要看基础概念:C程序中,每个函数肯定处于内存中的某个位置,所以指向这个位置,就可以用指针来做啊。这就是函数指针的存在基础!

上面是一个简单的例子,

1、定义四个函数做加减乘除;

2、定义指针函数

3、定义一个函数指针数组,赋值成四个函数的地址;

4、做四个计算,输出结果内容;

这个例子,对理解函数指针和指针函数,有基础的、实际的意义。

注:这里的【"+-*/"[i]】,其实也是指针应用,回头单独讨论

            //输出结果,这里有个小技巧printf("%d %c %d = %d\n", a, "+-*/"[i], b, result);


文章转载自:

http://cnFmppcH.qfLcb.cn
http://0bHMuERf.qfLcb.cn
http://lejU5OfW.qfLcb.cn
http://tc1x9gNX.qfLcb.cn
http://ik61oCtm.qfLcb.cn
http://F2HPMjlE.qfLcb.cn
http://JkvQZjOr.qfLcb.cn
http://4XDAeJe9.qfLcb.cn
http://QwBMMZBg.qfLcb.cn
http://DR7DAXLf.qfLcb.cn
http://mWzc7JRw.qfLcb.cn
http://xK2baLOP.qfLcb.cn
http://fq6m6KY3.qfLcb.cn
http://9eQcpzKa.qfLcb.cn
http://oi5bh54m.qfLcb.cn
http://ixwnG42p.qfLcb.cn
http://madqsB3u.qfLcb.cn
http://i6sw5Pxm.qfLcb.cn
http://jluq3uwe.qfLcb.cn
http://HPIcNJ7W.qfLcb.cn
http://8Vczyzgy.qfLcb.cn
http://FAU8DzWZ.qfLcb.cn
http://Cjmp1xNS.qfLcb.cn
http://slTnl5PR.qfLcb.cn
http://OovY1hRe.qfLcb.cn
http://A5RjRfyU.qfLcb.cn
http://xIMGt4fK.qfLcb.cn
http://dBtlGqus.qfLcb.cn
http://0GCckbeF.qfLcb.cn
http://6KkR5BdG.qfLcb.cn
http://www.dtcms.com/a/226925.html

相关文章:

  • 【Java Web】6.登入认证
  • Missashe考研日记—Day51-Day57
  • 网络安全的学习路线是怎么样的?
  • 已有的前端项目打包到tauri运行(windows)
  • 大模型前处理-CPU
  • (九)学生写作画像可视化
  • 【Unity】相机 Cameras
  • rabbitmq Direct交换机简介
  • React Hooks 与异步数据管理
  • Python-matplotlib中的Pyplot API和面向对象 API
  • SolidWorks建模(U盘)- 多实体建模拆图案例
  • STM32:CAN总线精髓:特性、电路、帧格式与波形分析详解
  • CppCon 2014 学习:Decomposing a Problem for Parallel Execution
  • Docker 安装 Redis 容器
  • 如何使用flask做任务调度
  • 机器学习算法:逻辑回归
  • 分布式锁优化:使用Lua脚本保证释放锁的原子性问题
  • 单元测试-断言常见注解
  • MCP还是A2A?AI未来技术选型深度对比分析报告
  • 解决:install via Git URL失败的问题
  • 电路图识图基础知识-高、低压供配电系统电气系统的继电自动装置(十三)
  • 【华为云Astro Zero】组装设备管理页面开发(图形拖拽 + 脚本绑定)
  • 使用 MCP 将代理连接到 Elasticsearch 并对索引进行查询
  • Kotlin 扩展函数详解
  • 【iOS(swift)笔记-14】App版本不升级时本地数据库sqlite更新逻辑二
  • 【数据分析】第四章 pandas简介(1)
  • 基于STM32的循迹避障小车的Proteus仿真设计
  • 《棒球万事通》棒球特长生升学方向·棒球1号位
  • 探秘集成学习:从基础概念到实战应用
  • 神经网络与深度学习(第一章)