qsort的比较函数传递参数注意事项

使用qsort进行快速排序过程中需要传递一个比较函数,这个函数有两个参数,形如const void *a, const void *b,具体转换成哪种类型就要看情况了。

若是整形数组,则在比较函数中进行如下转换,*(int *)a , *(int *)b;

若是double,则在函数中进行如下转换,*(double *)a, *(double *)b;

但是有两种特殊情况。

一是二维字符数组

这个转换是这样的,strcmp((char *)a, (char *)b)

二是字符指针数组

这个转换是这样的,strcmp(*(char **)a, *(char **)b);


如何理解呢?

我觉得指针是一个数组,具体转换成哪种类型,就要看我们需要什么类型,以及指针值表示的地址所在位置。

所以二维字符数组,比如char a[200][2],是如下形式:

[][] [][] [][]

所以a指向开头,&a[1] 指向第二块,我们在参数要做的就仅仅是转换成char *s类型即可。

而指针数组又是另外一回事了。比如char *a[200],形如

[0x1bcaa][0xaaaa]

所以a指向第一个元素,&a[1]指向第二个元素,我们在参数要做的就是转换成*(char **)即可。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值