指针(2)

简介: 指针(2)

函数指针数组

函数指针数组是一个用来存放函数指针(地址)的数组。
image.png
如上图,是将两个函数指针存入数组中。如何写函数指针数组名呢?我们可以先写出函数指针类型int ()(int,int)然后在()里面加上数组名[]即可。

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

回调函数

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

qsort函数的使用:

qsort函数是一个库函数,底层使用的快速排序的方式,用来对数据进行排序,可以直接使用,可以用来排序任意类型的数据,它会将数据进行升序排序。
image.png
如上图,qsort()函数有4个参数,我们还看到里面有void类型的指针。void相当于一个垃圾桶,什么类型的指针都能存放。
image.png
例子:
image.png
为什么qsort函数里要用void类型的指针呢?因为我们并不确定我们要排序的数组是什么类型的元素,比如整形或者是结构体类型,用void它将更有通用性。

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

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

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

如果返回值等于0(=0),那么e1所指向的元素和e2所指向的元素顺序不确定。
image.png
如上图,我们自己设计的函数cmp_int,当我们需要使用void*类型的数据时,我们需要先进行强制类型转换,然后才能进行解引用。
image.png
如上图,当我们需要比较的数据是结构体类型时,我们只需要改变qsort函数的第四个参数指向的函数,做出略微的改动,就能进行排序了。 qsort函数的第四个参数,也是一个回调函数。

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

目录
相关文章
|
编解码 算法 数据可视化
数字信号处理(DSP):原理、应用与代码实现
数字信号处理(DSP):原理、应用与代码实现
|
SQL 分布式计算 DataWorks
通过DataWorks使用PyODPS
PyODPS为MaxCompute的Python版SDK,支持在DataWorks中开发运行PyODPS任务。本文为您介绍在DataWorks上使用PyODPS的使用限制、主要流程和部分简单应用示例
502 2
|
开发框架 JSON 前端开发
利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理
利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理
|
存储 设计模式 Java
Java中的静态方法深入解析
Java中的静态方法深入解析
351 0
|
Windows
LabVIEW安装第三方VISA软件后NI VISA失效
LabVIEW安装第三方VISA软件后NI VISA失效
197 0
|
网络协议 搜索推荐 Java
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)(上)
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)
471 2
|
人工智能 搜索推荐 物联网
未来智能家居技术发展趋势
随着科技的不断进步,智能家居技术正日益成为人们生活中不可或缺的一部分。本文将探讨未来智能家居技术的发展趋势,包括人工智能、物联网、虚拟现实等技术在智能家居领域的应用,以及未来智能家居的可能发展方向和对生活的影响。
|
C语言
C语言——入门分支与循环
C语言——入门分支与循环
81 0
|
XML Java 编译器
JDK1.5,1.6,1.7,1.8,1.9,1.10,1.11的新特性整理
JDK1.5,1.6,1.7,1.8,1.9,1.10,1.11的新特性整理
1376 0
|
JavaScript 前端开发 网络架构
Vue的 hash 模式与 history 模式
Vue的 hash 模式与 history 模式
200 0