【发布时间】:2011-11-13 07:57:48
【问题描述】:
这是来自我正在使用的“魔术”数组库。
void
sort(magic_list *l, int (*compare)(const void **a, const void **b))
{
qsort(l->list, l->num_used, sizeof(void*),
(int (*)(const void *,const void *))compare);
}
我的问题是:qsort 的最后一个参数到底在做什么?
(int (*)(const void *, const void*))compare)
qsort 采用 int (*comp_fn)(const void *,const void *) 作为比较器参数,但此排序函数采用双指针比较器。不知何故,上面的行将双指针版本转换为单指针版本。有人可以帮忙解释一下吗?
【问题讨论】:
-
C 语法的意思是undefined behavior。
-
这到底是怎么回事?如果向我展示了该
sort函数的原型并要求为它编写一个比较函数,我会将参数转换为int **并双重取消引用它们以获得该值,这很可能会崩溃该程序。或者给出不正确的结果。 -
有些东西看起来很奇怪。 compare 函数可能最终会执行 (**a > **b) 但 qsort 将仅使用指向元素的指针调用 compare。所以它可能会取消引用它一次太多。或者数组中的元素可能是指针。 sort 是对指针进行排序。在这种情况下,typedef 会很好。
标签: c syntax function-pointers qsort