我看到很多人在 qsort 比较器函数中使用减法。我认为这是错误的,因为在处理这些数字时:int nums[]={-2147483648,1,2,3}; INT_MIN = -2147483648;
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
我写了这个函数来测试:
#include <stdio.h>
#include <limits.h>
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main(void)
{
int a = 1;
int b = INT_MIN;
printf("%d %d\n", a,b);
printf("%d\n",compare((void *)&a,(void *)&b));
return 0;
}
输出是:
1 -2147483648
-2147483647
but a > b
所以输出应该是正数。
我看过很多书都是这样写的。我认为这是错误的;处理时应该这样写int
types:
int compare (const void * a, const void * b)
{
if(*(int *)a < *(int *)b)
return -1;
else if(*(int *)a > *(int *)b)
return 1;
else
return 0;
}
我只是不明白为什么许多书籍和网站都以如此误导性的方式写作。
如果您有不同的看法,请告诉我。