无论是使用 sort() 或者 qsort(), 都会使用到自己定义比较函数,
习惯上定义为 cmp
如:
int cmp(const void *x, const void *y) {
return *(int*)x - *(int*)y;
}
我一直也是这样用,直到去年寒假给学弟们讲课的时候,有个学弟
问: 为什么不可以写成 :
int cmp(const void *x, const void *y) {
return *(int*)x > *(int*)y;
}
当时我没有回答,而是说回去查查资料。
知道今天看网友博客的时候偶然间翻到了这样的一篇文章。
上面这样说:
返回正数就是说 cmp 传入参数第一个要放在第二个后面, 负数就是传入参数第一个要放第二个前面, 如果是 0, 那就无所谓谁前谁后
所以对于上面学弟所说的那种方式, 是行不通的,因为
*(int*)x > *(int*)y;
是一个条件语句, 为真时返回非零值, 为假时返回0。故与上述规则不一致。