我写了比较函数
int cmp(const int * a,const int * b)
{
if (*a==*b)
return 0;
else
if (*a < *b)
return -1;
else
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我有我的声明
int cmp (const int * value1,const int * value2);
Run Code Online (Sandbox Code Playgroud)
我在我的程序中调用qsort就像这样
qsort(currentCases,round,sizeof(int),cmp);
Run Code Online (Sandbox Code Playgroud)
当我编译它时,我收到以下警告
warning: passing argument 4 of ‘qsort’ from incompatible pointer type
/usr/include/stdlib.h:710: note: expected ‘__compar_fn_t’ but argument is of type ‘int
(*)(const int *, const int *)’
Run Code Online (Sandbox Code Playgroud)
该程序工作正常,所以我唯一担心的是为什么它不喜欢我使用它的方式?
ken*_*ytm 19
该cmp函数的原型必须是
int cmp(const void* a, const void* b);
Run Code Online (Sandbox Code Playgroud)
您可以在qsort的调用中强制转换它(不推荐):
qsort(currentCases, round, sizeof(int), (int(*)(const void*,const void*))cmp);
Run Code Online (Sandbox Code Playgroud)
或者将void指针强制转换为cmp中的int-pointers(标准方法):
int cmp(const void* pa, const void* pb) {
int a = *(const int*)pa;
int b = *(const int*)pb;
...
Run Code Online (Sandbox Code Playgroud)