C语言基础——函数指针

本人C语言学习笔记

函数指针简介

函数名称的本质是一个函数指针(隐式转换),用来指向函数地址。在VS中程序每次运行函数地址都不同,而在Qt中是不变的。

直接定义法:返回值类型(*函数指针名)(参数列表)

如在Qt程序中有函数void test(int a);且用qDebug(“%d”,test)打印出函数地址为4199952,

可有void(*pFunc)(int) = (void(*)(int))4199952;

等式右值强转在C语言中可省略,C++要有

然后pFunc(1);即可调用函数,相当于text(1);

定义方法

和定义数组类型相似,除了前文的直接定义法(通常直接定义法可以利用编译器的提示功能,先用个int*接收然后生成看提示,简单好记也最常用,如果不需要创建多个对象的话),还有两种方法。

在这里插入图片描述

函数指针数组

即内容是函数指针的指针数组,定义时索引[]应当在函数指针数组名后面,如void(*pFunc[3])(int);然后pFunc[1]=func1; pFunc[2]=func2; pFunc[3]=func3;再用循环可以依次调用。

函数指针数组必须函数格式都一样,即返回值、参数列表相同。

在这里插入图片描述

函数指针做函数参数(回调函数)

回调函数,一开始不能确定某些参数类型,故要由用户先提供确定,再回头调用函数。实际工作中更多地是提供回调函数去使用别人的接口,而不是自己写。

提供一个printAllArray()函数,能够打印任意类型的数组,先尽量万能地接收要打印的数组相关参数和用户的函数指针,尽量预处理后涉及到具体参数类型的操作交给用户提供的myPrintInt(),也就是把其他的都封装好,留一个含函数指针的接口给用户。通常vs提示参数为pred什么的就是要传入一个回调函数。

在这里插入图片描述

回调函数案例

查找任意类型的数组中的元素是否存在findArrayEle()

在这里插入图片描述

用户提供的函数如下:

在这里插入图片描述

即可查询指定数据

在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值