我在Apple文档中看到的示例,对如何调用qsort_b
函数感到困惑?需要传递的参数是const void *l
& const void *r
。
char *myCharacters[3] = { "TomJohn", "George", "Charles Condomine" };
qsort_b(myCharacters, 3, sizeof(char *), ^(const void *l, const void *r) {
char *left = *(char **)l;
char *right = *(char **)r;
return strncmp(left, right, 1);
})
答案 0 :(得分:2)
根据文档,标准C库qsort
与qsort_b
之间的区别在于qsort_b
需要block,而不是函数指针:
void qsort(void *base, size_t nel, size_t width, int (*compar)(const void *, const void *));
void qsort_b(void *base, size_t nel, size_t width, int (^compar)(const void *, const void *));
块的目的与比较函数的目的相同 - 确定数组的两个元素是否相等,或者它们是否相等,哪一个大于另一个。
const void *l
&const void *r
?
传递这些参数的不是您:这些参数通过qsort_b
传递回比较块。第一个参数是被比较的左元素的值;第二个是右边的元素。