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

指针(2)

函数指针数组

函数指针数组是一个用来存放函数指针(地址)的数组。

如上图,是将两个函数指针存入数组中。如何写函数指针数组名呢?我们可以先写出函数指针类型int (*)(int,int)然后在(*)里面加上数组名[]即可。

指向函数指针数组的指针

 如何写指向函数指针数组的指针呢?我们可以参照上面的写法,先将数组名去掉,剩下int (*)(int,int),然后根据它是数组指针加上(*p)[]。

回调函数

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件的响应。

qsort函数的使用:

qsort函数是一个库函数,底层使用的快速排序的方式,用来对数据进行排序,可以直接使用,可以用来排序任意类型的数据,它会将数据进行升序排序。

如上图,qsort()函数有4个参数,我们还看到里面有void*类型的指针。void*相当于一个垃圾桶,什么类型的指针都能存放。

例子: 

为什么qsort函数里要用void*类型的指针呢?因为我们并不确定我们要排序的数组是什么类型的元素,比如整形或者是结构体类型,用void*它将更有通用性。 

qsort函数里的第4个参数是一个函数指针,指向的函数需要我们自己设计实现,函数的作用是比较两个元素,返回一个整形数据,通过返回的数据来判断两个元素的大小。

如果返回值小于0(<0),那么e1所指向的元素会被排在e2所指向元素的前面。

如果返回值大于0(>0),那么e1所指向的元素会被排在e2所指向元素的后面。

如果返回值等于0(=0),那么e1所指向的元素和e2所指向的元素顺序不确定。

如上图,我们自己设计的函数cmp_int,当我们需要使用void*类型的数据时,我们需要先进行强制类型转换,然后才能进行解引用。

如上图,当我们需要比较的数据是结构体类型时,我们只需要改变qsort函数的第四个参数指向的函数,做出略微的改动,就能进行排序了。 qsort函数的第四个参数,也是一个回调函数。

更多qsort函数的内容,请观看下一篇博文。


http://www.kler.cn/a/152217.html

相关文章:

  • windows 查看mysql的错误日志
  • Android 11.0 修改Android系统的通知自动成组的数量
  • Spring底层篇
  • uniapp如何与原生应用进行混合开发?
  • Docker stats 命令
  • Javaweb之Vue组件库Element案例的详细解析
  • pthread 使用入门
  • 【猜数字游戏】用wxPython实现:基本的游戏框架 + 简单的图形用户界面
  • Constraintlayout
  • numpy知识库:深入理解numpy.resize函数和数组的resize方法
  • List系列集合
  • 道路病害检测数据集RDD2022的标签映射关系【参考自官网给出的label_map.pbtxt文件,附查看代码】
  • 华为云cce容器管理中的调度策略作用
  • 在Pycharm中创建项目新环境,安装Pytorch
  • Elasticsearch:对时间序列数据流进行降采样(downsampling)
  • 李宏毅2020机器学习课程笔记(二)- 深度学习
  • 建堆的时间复杂度和堆排序
  • (C++20) constinit常量初始化
  • 显示器校准软件BetterDisplay Pro mac中文版介绍
  • Java微服务框架 HP-SOA 1.0.5 — 完整支持 Spring Cloud 和 Dubbo