在 C 中使用 qsort

using qsort in C

我在编译使用 'qsort' 的程序时遇到问题 我必须对指向结构(称为元素)的动态指针数组进行排序 当我尝试编译程序时出现以下错误: "error: passing argument 4 of 'qsort' from incompatible pointer type..."

我的比较函数(用于 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;
    ...................
}

谁能告诉我哪里出了问题..? 我已经尝试了很多改变比较功能的模式,但仍然一无所获

谢谢

这是 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* 就是那些指针。

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

return 代码 +1, 0,-1 与 strcmp()

中的 return 代码具有完全相同的含义