在stdlib.h中,
void qsort (void* base, size_t num, size_t size,
int (*compar)(const void*,const void*));
是否可以将以下函数传递为compar
,
int compareMyType (const void * a, const void * b, float c)
{
float tmp = f((MyType*)a, (MyType*)b, c ); // f is some function
if (tmp < 0) return -1;
if (tmp == 0) return 0;
if (tmp > 0) return 1;
}
如果不是,如果不将c
声明为全局变量,是否有某种方法?谢谢!
答案 0 :(得分:3)
创建一个与qsort
兼容的代理函数,并在其正文中调用您的函数:
int myCompare(const void *a, const void *b) {
float c = ...;
return compareMyType(a, b, c);
}
...
qsort(..., myCompare);
答案 1 :(得分:0)
是否可以将以下函数作为比较
传递
没有。指向仅具有完全相同签名的功能的指针是兼容的。您的compar
函数必须具有签名
int compar(const void *, const void *);
您可以使用自定义compar
函数原型编写自己的qsort函数,或者您可以在上述签名的函数中封装不同签名的比较函数,只需调用您的比较函数。
答案 2 :(得分:0)
不,功能签名不匹配。 compareMyType(const void * a,const void * b,float c)和int( compar)(const void ,const void *)
您可以在结构中打包变量c,并将结构指针强制转换为void指针并传递它。这是首先使用void指针的主要优点。