Raf*_*ffo 2 c libc 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);
Run Code Online (Sandbox Code Playgroud)
我尝试创建一个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;
}
Run Code Online (Sandbox Code Playgroud)
(请不要强制compare_funct转换void*.除了关闭类型检查引起未定义的行为外,它什么都不做.)
编辑:正如@R ..指出的那样,上面展示了未定义的行为,除非a并b指向一个公共数组.为了完全可移植性(但以牺牲立即可理解性为代价),您应该使用
int compare_pointers(void const *p, void const *q)
{
return memcmp(p, q, sizeof(item *));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1692 次 |
| 最近记录: |