网站首页 > 技术文章 正文
函数指针是指向函数的指针变量。
通常我们说的指针变量是指向一个整型变、字符型或数组等变量,而函数指针是指向函数。
函数指针可以像一般函数一样,用于调用函数、传递参数。
函数指针变量的声明:
typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针变量
实例
以下实例声明了函数指针变量 p,指向函数 max:
实例
#include<stdio.h>intmax(intx, inty){returnx > y ? x : y;}intmain(void){/* p 是函数指针 */int(* p)(int, int) = & max; // &可以省略inta, b, c, d; printf("请输入三个数字:"); scanf("%d %d %d", & a, & b, & c); /* 与直接调用函数等价,d = max(max(a, b), c) */d = p(p(a, b), c); printf("最大的数字是: %d ", d); return0;}
编译执行,输出结果如下:
请输入三个数字:1 2 3最大的数字是: 3
回调函数
函数指针作为某个函数的参数
函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。
简单讲:回调函数是由别人的函数执行时调用你实现的函数。
实例
实例中 populate_array 函数定义了三个参数,其中第三个参数是函数的指针,通过该函数来设置数组的值。
实例中我们定义了回调函数 getNextRandomValue,它返回一个随机值,它作为一个函数指针传递给 populate_array 函数。
populate_array 将调用 10 次回调函数,并将回调函数的返回值赋值给数组。
实例
#include<stdlib.h>#include<stdio.h>// 回调函数voidpopulate_array(int *array, size_tarraySize, int(*getNextValue)(void)){for(size_ti=0; i<arraySize; i++)array[i] = getNextValue();}// 获取随机值intgetNextRandomValue(void){returnrand();}intmain(void){intmyarray[10]; populate_array(myarray, 10, getNextRandomValue); for(inti = 0; i < 10; i++){printf("%d ", myarray[i]); }printf(" "); return0;}
编译执行,输出结果如下:
16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709
猜你喜欢
- 2024-09-10 【STM32F103ZET6开发板】第2-1讲:GPIO硬件设计及原理介绍
- 2024-09-10 【STM32F103ZET6开发板】第2-5讲:外部中断EXTI
- 2024-09-10 关于Linux 进程编程入门(进阶)(linux进程代码)
- 2024-09-10 「STC8A8K64D4开发板」第2-12讲:数码管显示
- 2024-09-10 【STM32F103ZET6开发板】第2-6讲:USART串口通信
- 2024-09-10 【STM32F103ZET6开发板】第2-3讲:GPIO输出驱动蜂鸣器
- 2024-09-10 【STM32F103ZET6开发板】第2-2讲:GPIO输入按键检测
- 2024-09-10 【STM32F103ZET6开发板】第3-7讲:电子墨水屏显示
- 2024-09-10 【STM32F103ZET6开发板】第2-4讲:触摸按键输入检测
- 2024-09-10 【STC8A8K64D4开发板】——第2-2讲:有源蜂鸣器鸣响控制
- 08-02C|在一个结构体嵌套一个共用体实现一体多用
- 08-02C++中,常用的强制类型转换函数
- 08-02如何使用C语言编程实现一个推箱子游戏?技术核心和算法实现
- 08-02C++20 新特性(24):模板访问权限和typename的放宽
- 08-02C++零基础到工程实践
- 08-02[深度学习] Python人脸识别库face_recognition使用教程
- 08-02AI算法之怎么利用Python实现支持向量机SVM算法
- 08-02【机器学习】SVM支持向量机
- 1521℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 623℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 526℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 491℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 460℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 458℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)