qsort函数下的return *(int *)a-*(int *)b; 是什么意思???

[复制链接]
查看11 | 回复3 | 2016-6-22 21:16:19 | 显示全部楼层 |阅读模式
有这样 一组数23,44,12,42,14,35,47,31,9,20
现在要以一个整数的各位数字之和的大小为依据,以小到大排序,用qsort()函数这程序怎么写?????
我想知道这条语句*(int *)a-*(int *)b;它是怎么执行的,像是一个数组的话,它能返回很多个值吗???

回复

使用道具 举报

千问 | 2016-6-22 21:16:19 | 显示全部楼层
这里应该是comp函数的返回值,qsort以一定的标准进行排序,而comp就是这个标准为了qsort适用于任何结构的数组,comp函数的参数是两个const void*类型的变量,使用时根据结构的不同进行转换,这里显然是在排序int型数组*(int*)a的意思是,将a转换为int*类型,即将空类型指针数据转换为int型指针数据,然后再解指针,得到其值,返回a-b的值,comp会根据这个值来判断a和b的顺序,从而完成排序如果你在comp函数中加上输出,就可以很明显看到排序的过程了 你可以试一下a-b和b-a分别是从小到大和从大到小,qsort是quick sort的简写,其实就是快速排序,所以每次就比较两个值 qs
回复

使用道具 举报

千问 | 2016-6-22 21:16:19 | 显示全部楼层
return返回值呀,*(int *)a-*(int *)b是将a 和b 的值作为一个int型地址,最为直接查找的寻址方式,找到的值想减,在返回
回复

使用道具 举报

千问 | 2016-6-22 21:16:19 | 显示全部楼层
返回整数a减去整数b的结果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行