繁体   English   中英

在C中使用qsort / casting

[英]Using qsort / casting in C

我正在尝试使用qsort()对我的数组进行排序,但是出现了一个奇怪的错误...

error: passing argument 4 of ‘qsort’ from incompatible pointer type
/usr/include/stdlib.h:761: note: expected ‘__compar_fn_t’ but argument is of 
type ‘int (*)(struct Record *, struct Record *)’

这是我的函数调用:

qsort(arr, (sizeof(arr)/sizeof(struct Record)), sizeof(struct Record), compare);

这是我的比较方法:

int compare (struct Record *a, struct Record *b){

return (a->key - b->key);
}

我知道这很可能是一个强制转换问题-但我认为我可以通过比较函数本身的名称。

如果您看一下,错误__compar_fn_t清楚了: __compar_fn_t类型为int(*)(const void*, const void*)但是您的函数是int(*)(struct Record*, struct Record*) Quicksort不知道数组的类型,因此您必须将void*用作比较器参数,然后将其强制转换为数组中的适当类型:

int compare (const void *a, const void *b){
    struct Record const* a_r = (struct Record const*)a,
                       * b_r = (struct Record const*)b;

    return (a_r->key - b_r->key);
}
int compare (const void * a, const void * b)
{
  return ( *(struct Record*)a -  *(struct Record*)b );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM