我使用stdlib.h中的qsort,
void qsort (void* base,size_t num,size_t size,int (*compar)(const void*,const void*));
以下列方式:
void myfun (float *arr,int n,float c) // value of c is changeable { ...// some code qsort(float *arr,n,sizeof(float),compareme); ...// some code }
同
int compareme (const void * a,const void * b) { float tmp = f((float*)a,(float*)b,c ); // f is some function,and how can I pass c here? if (tmp < 0) return -1; if (tmp == 0) return 0; if (tmp > 0) return 1; }
我怎样才能在比较中使用c?
谢谢!
@H_301_16@解决方法
许多人诉诸于使用(令人讨厌的)全局变量.
qsort()不包含仅传递给用户提供的compar()函数的额外void指针参数,这太糟糕了.我最终写了自己的qsort()来克服这个限制.
原型:
int myQsort( void *arrayBase,size_t elements,size_t elementSize,int(*compar)(const void *,const void *,void *callerArg),void *callerArg );
这允许我将各种结构(强制转换为void *)传递给我的compar()fn.
@H_301_16@ @H_301_16@ 原文链接:https://www.f2er.com/c/239569.html