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

【看到哪里写到哪里】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://www.xdnf.cn/news/10517.html

相关文章:

  • P1115 最大子段和
  • 打卡第43天
  • 【Ragflow】24.Ragflow-plus开发日志:增加分词逻辑,修复关键词检索失效问题
  • 从 AMQP 到 RabbitMQ:核心组件设计与工作原理(一)
  • [Java恶补day13] 53. 最大子数组和
  • 判断使用什么技术来爬取数据详细讲解
  • 【Redis】笔记|第5节|Redisson实现高并发分布式锁核心源码
  • 个人总结八股文之-基础篇(持续更新)
  • 汽车软件 OTA 升级技术发展现状与趋势
  • 设计模式——中介者设计模式(行为型)
  • 【Qt开发】对话框
  • 深入理解 Linux 文件系统与日志文件分析
  • NodeJS全栈WEB3面试题——P8项目实战类问题(偏全栈)
  • 安全态势感知中的告警误报思考
  • 多群组部署
  • X浏览器APP:轻巧快捷,畅享极速浏览
  • TomSolver 库 | config详解及其测试
  • ANN与SNN的那些事
  • 动态规划(10):状态压缩
  • 力扣LeetBook数组和字符串--数组简介
  • Spring Security入门:创建第一个安全REST端点项目
  • [RoarCTF 2019]Easy Calc
  • SQL 逻辑处理顺序详解
  • 第二章支线五 ·CSS炼金续章:变量与暗黑主题术
  • 放弃 tsc+nodemon 使用 tsx 构建Node 环境下 TypeScript + ESM 开发环境搭建指南
  • SpringMVC的注解
  • StarRocks物化视图
  • 可视化大屏通用模板Axure原型设计案例
  • 代码随想录60期day54
  • [leetcode] 二分算法