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

C函数指针

函数指针是指向函数的指针变量。

通常我们说的指针变量是指向一个整型、数组或字符型等变量,而函数指针是指向函数。

函数指针可以像一般函数一样,用于调用函数、传递参数。

函数指针变量的声明:

typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型

实例

以下实例声明了函数指针变量 p,指向函数 max:

实例

#include <stdio.h>int max(int x, int y)
{return x > y ? x : y;
}int main(void)
{/* p 是函数指针 */int (* p)(int, int) = & max; // &可以省略int a, 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\n", d);return 0;
}

编译执行,输出结果如下:


请输入三个数字:1 2 3
最大的数字是: 3

回调函数

函数指针作为某个函数的参数

函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。

简单讲:回调函数是由别人的函数执行时调用你实现的函数。

以下是来自知乎作者常溪玲的解说:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。

实例

实例中 populate_array() 函数定义了三个参数,其中第三个参数是函数的指针,通过该函数来设置数组的值。

实例中我们定义了回调函数 getNextRandomValue(),它返回一个随机值,它作为一个函数指针传递给 populate_array() 函数。

populate_array() 将调用 10 次回调函数,并将回调函数的返回值赋值给数组。

实例

#include <stdlib.h>  
#include <stdio.h>void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{for (size_t i=0; i<arraySize; i++)array[i] = getNextValue();
}// 获取随机值
int getNextRandomValue(void)
{return rand();
}int main(void)
{int myarray[10];/* getNextRandomValue 不能加括号,否则无法编译,因为加上括号之后相当于传入此参数时传入了 int , 而不是函数指针*/populate_array(myarray, 10, getNextRandomValue);for(int i = 0; i < 10; i++) {printf("%d ", myarray[i]);}printf("\n");return 0;
}

编译执行,输出结果如下:

16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709 

相关文章:

C函数指针

函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、数组或字符型等变量&#xff0c;而函数指针是指向函数。函数指针可以像一般函数一样&#xff0c;用于调用函数、传递参数。函数指针变量的声明&#xff1a;typedef int (*fun_ptr)(int,int); // 声明一个指…...

2023同等学力申请硕士计算机综合国考

同等学力国考报名要开始了 2023年2月15日&#xff0c;中国教育考试网和“全国同等学力人员申请硕士学位管理工作信息平台”&#xff08;https://tdxl.chsi.com.cn&#xff0c;联系服务电话&#xff1a;010-67410388&#xff09;公布报名工作通知。考生须按照通知要求进行注册或…...

英语基础-并列句概述

什么是并列句&#xff1f;并列句就是用连词把独立的句子连接起来&#xff0c;使得句子之间产生并列的逻辑。 1. 并列句中的逻辑 1. 小明步行上学&#xff0c;小红骑自行车上班。 Ming goes to school on foot,and Hong goes to work by bike. 平行逻辑 2. 小红经常玩手机…...

大数据框架之Hadoop:HDFS(一)HDFS概述

1.1HDFS产出背景及定义 HDFS 产生背景 随着数据量越来越大&#xff0c;在一个操作系统存不下所有的数据&#xff0c;那么就分配到更多的操作系统管理的磁盘中&#xff0c;但是不方便管理和维护&#xff0c;迫切需要一种系统来管理多台机器上的文件&#xff0c;这就是分布式文件…...

20230210组会论文总结

目录 【Ultra-High-Definition Low-Light Image Enhancement: A Benchmark and Transformer-Based Method】 【ShuffleMixer: An Efficient ConvNet for Image Super-Resolution】 【A Close Look at Spatial Modeling: From Attention to Convolution 】 【DEA-Net: Single i…...

Python - 数据容器dict(字典)

目录 字典的定义 字典数据的获取 字典的嵌套 字典的各种操作 新增与更新元素 [Key] Value 删除元素 pop和del 清空字典 clear 获取全部的键 keys 遍历字典 容器通用功能总览 字典的定义 使用{}&#xff0c;不过存储的元素是一个个的&#xff1a;键值对&#…...

傻白探索Chiplet,文献阅读笔记汇总(十二)

Summary&#xff08;方便分类管理&#xff09; Article&#xff08;文献出处&#xff09; 方便再次搜索 Data&#xff08;文献数据&#xff09; 总结归纳&#xff0c;方便理解 Comments&#xff08;对文献的想法&#xff09;/Why&#xff08;为什么看这篇文献&#xff09;强…...

#电子电气架构——Vector工具常见问题解决三板斧

我是穿拖鞋的汉子,魔都中一位坚持长期主义的工科男。 今天在与母亲聊天时,得到老家隔壁邻居一位大姐年初去世的消息,挺让自己感到伤感!岁月如流水,想抓都抓不住。想起平时自己加班的那个程度,可能后续也要自己注意身体啦。 老规矩,分享一段喜欢的文字,避免自己成为高知…...

文本三剑客之grep

Grep是Linux用户用来搜索文本字符串的命令行工具。您可以使用它在文件中搜索某个单词或单词的组合&#xff0c;也可以将其他Linux命令的输出通过管道传输到grep&#xff0c;因此grep可以仅显示您需要查看的输出。grep的命令格式如下&#xff1a;grep 选项 查找条件 目标文件…...

pwn手记录题1

fuzzerinstrospector(首届数字空间安全攻防大赛) 主体流程&#xff08;相对比较简单&#xff0c;GLibc为常见的2.27版本&#xff0c; Allocate申请函数&#xff08;其中有两个输入函数Read_8Int、Read_context&#xff1b; 还存在着后门函数&#xff1b; 关键点在于如何利用…...

自动驾驶规划 - Apollo Lattice Planner算法【1】

文章目录Lattice Planner简介Lattice Planner 算法思路1. 离散化参考线的点2. 在参考线上计算匹配点3. 根据匹配点&#xff0c;计算Frenet坐标系的S-L值4. parse the decision and get the planning target5. 生成横纵向采样路径6. 轨迹cost值计算&#xff0c;进行碰撞检测7. 优…...

以太坊数据开发-Web3.py-安装连接以太坊数据

Web3.py是连接以太坊的python库&#xff0c;它的API从web3.js中派生而来。如果你用过web3.js&#xff0c;你会对它的API很熟悉。但惭愧的是&#xff0c;作为一个以太坊上Dapp的开发者&#xff0c;我几乎没有直接使用过web3.js&#xff0c;也没有看过它的API。 官网&#xff1a…...

【触摸屏功能测试】MQTT_STD本地调试说明-测试记录

1、MQTT简介 MQTT是一种基于发布/订阅模式的“轻量级”通讯协议。它是针对受限的、低带宽的、高延迟的、网络不可靠的环境下的网络通讯设备设计的。 发布是指客户端将消息传递给服务器&#xff0c;订阅是指客户端接收服务器推送的消息。每个消息有一个主题&#xff0c;包含若干…...

六十分之十三——黎明前

目录一、目标二、计划三、完成情况四、提升改进(最少3点)五、意外之喜(最少2点)六、总结一、目标 明确可落地&#xff0c;对于自身执行完成需要一定的努力才可以完成的 1.8本技术管理书籍阅读(使用番茄、快速阅读、最后输出思维导图)2.吴军系列硅谷来信1听书、香帅的北大金融…...

【Call for papers】CRYPTO-2023(CCF-A/网络与信息安全/2023年2月16日截稿)

Crypto 2023 will take place in Santa Barbara, USA on August 19-24, 2023. Crypto 2023 is organized by the International Association for Cryptologic Research (IACR). The proceedings will be published by Springer in the LNCS series. 文章目录1.会议信息2.时间节…...

线程的信号量和互斥量

文章目录线程的信号量初始化信号量&#xff1a;sem_init减少信号量&#xff1a;sem_wait增加信号量&#xff1a;sem_post删除信号量&#xff1a;sem_destroy代码示例线程的互斥量初始化互斥量&#xff1a;pthread_mutex_init锁住互斥量&#xff1a;pthread_mutex_lock解锁互斥量…...

关于Linux,开源社区与国产化的本质区别

因为生产力驱动而非理想主义驱动。 开源运动的蓬勃发展来自于GNU(GNU is not unix)&#xff0c;RichardMatthewStallman领导着一群黑客&#xff0c;带着对比尔盖茨的鄙视&#xff0c;制定了GPL协议&#xff0c;以后人人都能从伟大的前人身上学习到源代码的精髓&#xff0c;让软…...

Win11下Linux子系统迁移方法及报错解决

Win11 将Linux子系统从C盘迁移到其他盘Win11下Linux子系统迁移方法及报错解决1、下载LxRunOffline2、ERROR&#xff1a;directory is not empty 报错解决参考链接Win11下Linux子系统迁移方法及报错解决 C盘满了&#xff0c;Ubuntu子系统占了100多G怎么办&#xff1f;直接将子系…...

python维护的一些基础方法

1】通过命令行查看python安装库的基本信息 pip show numpy # 查看python中numpy库的安装版本信息 2】python 环境的开发与维护 python的开发与C\MATLAB等最大的不同就是&#xff0c;python中版本的更新不对历史版本负责&#xff0c;就是说你以历史版本开发的python程序&#…...

C语言 数组元素的指针

1.一个变量有地址&#xff0c;一个数组包含若干个元素&#xff0c;每个数组元素都在内存中占用存储单元&#xff0c;它们都有相应的地址。 2.指针变量既然可以指向变量&#xff0c;当然也可以指向数组元素&#xff08;把某一元素的地址放入一个指针变量中&#xff09;。 3.所谓…...

从配置字到实际运动:手把手教你用EtherCAT调试伺服电机的控制模式(以倍福TwinCAT3为例)

从配置字到实际运动&#xff1a;手把手教你用EtherCAT调试伺服电机的控制模式&#xff08;以倍福TwinCAT3为例&#xff09; 在工业自动化现场&#xff0c;伺服电机的精准控制往往决定着整条产线的运行效率。当面对一台全新的伺服驱动器时&#xff0c;如何快速完成从参数配置到实…...

深入理解 Tool Use 机制:AI Agent Harness Engineering 如何调用外部工具

深入理解 Tool Use 机制:AI Agent Harness Engineering 如何调用外部工具 引言 背景介绍 相信所有使用过大模型的开发者都遇到过这些典型痛点:问ChatGPT“今天北京的气温是多少”,它会告诉你“我的知识截止到2023年10月,无法提供实时天气信息”;让它计算“12345.67 * 9…...

CANN/ge 图引擎资源释放

aclgrphBuildFinalize 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch、Tens…...

算法21,搜索插入位置

一道经典的二分查找应用题&#xff0c;通常被称为“搜索插入位置”。笔记中的思路非常清晰&#xff0c;下面为你整理这道题的具体解法、代码实现以及需要注意的细节。1. 题目理解题目描述&#xff1a;给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并…...

Efficient-KAN:突破传统神经网络瓶颈的Kolmogorov-Arnold网络实战指南

Efficient-KAN&#xff1a;突破传统神经网络瓶颈的Kolmogorov-Arnold网络实战指南 【免费下载链接】efficient-kan An efficient pure-PyTorch implementation of Kolmogorov-Arnold Network (KAN). 项目地址: https://gitcode.com/GitHub_Trending/ef/efficient-kan 深…...

一屏融汇虚实 一擎驱动孪生:云边端协同架构赋能,打造城市园区港口通用数字孪生底座

一屏融汇虚实 一擎驱动孪生副标题&#xff1a;云边端协同架构赋能&#xff0c;打造城市园区港口通用数字孪生底座前言随着数字孪生向全域覆盖、多场景复用、高并发承载、实时性联动纵深发展&#xff0c;行业普遍面临场景割裂、架构分散、算力错配、底座不通用等痛点。城市、园区…...

别再为FDC2214数据抖动发愁了!一个接地气的屏蔽线替代方案与差分测量实战

FDC2214抗干扰实战&#xff1a;差分测量与数据稳定化技巧 在电容式传感项目中&#xff0c;FDC2214作为一款高分辨率多通道电容数字转换器&#xff0c;常被用于纸张计数、液位检测等场景。然而实际应用中&#xff0c;工程师们最头疼的莫过于数据抖动问题——导线轻微移动、环境…...

Android开发避坑:支付宝SDK返回4000错误,别急着改代码,先检查这个线程问题

Android开发深度解析&#xff1a;支付宝SDK返回4000错误的线程陷阱与系统级排查 当你在Android应用中集成支付宝支付功能时&#xff0c;是否遇到过这样的场景&#xff1a;一切配置看似正确&#xff0c;但调用支付接口后却收到了resultStatus:4000的错误提示&#xff0c;附带一句…...

Origin9.1绘图避坑指南:从数据导入到论文级.tif图保存的完整流程

Origin9.1科研绘图全流程避坑指南&#xff1a;从数据导入到论文级.tif输出 科研绘图是论文写作中不可或缺的一环&#xff0c;而Origin9.1作为经典的数据可视化工具&#xff0c;在学术界有着广泛的应用。然而&#xff0c;从原始数据到最终符合期刊要求的图表&#xff0c;这一过程…...

CANN/ops-nn RMS归一化动态量化算子

AddRmsNormDynamicQuantV2 【免费下载链接】ops-nn 本项目是CANN提供的神经网络类计算算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-nn 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推…...