qsort和bsearch指针数组

我需要对指向struc的指针进行排序。实际上,我需要在地址之间进行搜索,以查看数组中是否存在指向结构的给定指针。不幸的是,我在这些结构中没有“可比”的东西,所以我只想按地址排序。 我的代码是这样的:
item* arr[SIZE];
//something is inserted
qsort(arr, SIZE, sizeof(item*), (void*)compare_funct); 
//CUT
bsearch(curr, arr, SIZE, sizeof(item*), (void*)compare_funct);
我试着创建一个compare_funct,只是将指针转换为int并返回它们的差值,但这似乎不起作用。特别是,当我执行bsearch时,即使我知道该元素包含在数组中,我也总是得到NULL作为返回值。     
已邀请:
        
int cmp_items(void const *p, void const *q)
{
    item const *a = *(item const **)p, *b = *(item const **)q;
    return b - a;
}
(请不要将
compare_funct
强制转换为
void*
。除了关闭类型检查会引起未定义的行为外,这没有任何作用。) 编辑:正如@R ..指出的那样,除非
a
b
指向一个公共数组,否则上面的内容将显示未定义的行为。为了获得完全的可移植性(但要以立即理解为代价),您应该使用
int compare_pointers(void const *p, void const *q)
{
    return memcmp(p, q, sizeof(item *));
}
    
        看这里。 这篇文章很好地描述了它,它是指向struct的指针而不是指向char的指针。 基本上,这个想法是将struct **传递给(void *),然后将其放回struct **取消引用以获取struct *,然后进行比较。 使用qsort进行正确的转换可能很棘手。     

要回复问题请先登录注册