在 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 代码具有完全相同的含义
我在编译使用 '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 代码具有完全相同的含义