加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何将变量传递给函数?

发布时间:2020-12-16 05:00:26 所属栏目:百科 来源:网络整理
导读:我使用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 codeqsort(float *arr,n,sizeof(float),
我使用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?

谢谢!

解决方法

许多人诉诸于使用(令人讨厌的)全局变量.

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读