在C中使用qsort

时间:2015-05-05 00:54:18

标签: c compare qsort

编译使用&#q; qsort'的程序时遇到问题。 我必须对一个结构的动态指针数组(称为Element)进行排序 当我尝试编译程序时,我收到以下错误: "错误:传递' qsort'的参数4来自不兼容的指针类型..."

我的比较函数(对于qsort)是:

int compareElements(const void **e1, const void **e2)
{
    Elemenet* element1 = *(Element** const)e1;
    Elemenet* element2 = *(Element** const)e2;
    if (element1->key < element2->key)
        return -1;
    ...................
}

任何人都可以说出错了吗? 我已经尝试了很多改变比较功能的模式,但仍然没有。

谢谢

1 个答案:

答案 0 :(得分:1)

这是qsort功能的官方原型。

void qsort(void *base, 
          size_t nmemb, 
          size_t size,
          int (*compar)(const void *, const void *));

所以比较函数原型必须是:

int compare( const void*, const void* );

这两个const void *参数实际指向的是什么 取决于正在分类的内容。

表示二维数组,其中第一个索引是指针数组

然后const void *将是那些指针。

因此比较函数必须将参数转换为实际指向的参数。然后对要排序的字段进行比较。

返回代码+1,0,-1与strcmp()的返回代码具有完全相同的含义