编译使用&#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;
...................
}
任何人都可以说出错了吗? 我已经尝试了很多改变比较功能的模式,但仍然没有。
谢谢
答案 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()的返回代码具有完全相同的含义