b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c语言 函数指针 qsort()函数详解

电脑杂谈  发布时间:2018-02-11 18:15:03  来源:网络整理

c语言 函数指针 好处_c语言 函数指针下标_c语言 函数指针

一 写在开头

1.1 本节内容

学习C语言中的qsort()函数。c语言 函数指针

二 qsort()

2.1 函数原型

函数功能:qsort()函数的功能是对数组进行排序,数组有nmemb个元素,每个元素大小为size。c语言 函数指针

参数base - base指向数组的起始地址,通常该位置传入的是一个数组名

参数nmemb - nmemb表示该数组的元素个数

参数size - size表示该数组中每个元素的大小(字节数)

参数(*compar)(const void *, const void *) - 此为指向比较函数的函数指针,决定了排序的顺序。

c语言 函数指针 好处_c语言 函数指针_c语言 函数指针下标

函数返回值:无

注意:如果两个元素的值是相同的,那么它们的前后顺序是不确定的。也就是说qsort()是一个不稳定的排序算法。

2.2 compar参数

compar参数指向一个比较两个元素的函数。比较函数的原型应该像下面这样。注意两个形参必须是const void *型,同时在调用compar 函数(compar实质为函数指针,这里称它所指向的函数也为compar)时,传入的实参也必须转换成const void *型。在compar函数内部会将const void *型转换成实际类型,见下文。

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

如果compar返回值等于0(= 0),那么p1所指向元素与p2所指向元素的顺序不确定

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

因此,如果想让qsort()进行从小到大(升序)排序,那么一个通用的compar函数可以写成这样:

注意:你要将MyType换成实际数组元素的类型。

2.3 一个使用qsort()函数的小例子

c语言 函数指针 好处_c语言 函数指针下标_c语言 函数指针

分析一下compar函数。如果a小于b,则返回值为负数(< 0),也即a会排在b的前面。同理,若a大于b,则a会排在b的后面。所以,这里的qsort()为从小到大即升序排序。因此,运行结果为:10 20 25 40 90 100

2.4 修改compar(),使qsort()为降序排序

很简单,只要将上面compare()中的

改为:

即可,想想为什么可以。

2.5 改写

可以将上面的小例子改写如下:

改写的目的是尝试增强程序的健壮性,但我不知道这种方法的好坏,还请各位大神多多指教如何将代码写好。

三 参考资料

1. qsort - C++ Reference

2. man qsort


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-72248-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...