如何调用此功能?

时间:2014-07-22 10:23:02

标签: objective-c objective-c-blocks cextension

我在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);
})

1 个答案:

答案 0 :(得分:2)

根据文档,标准C库qsortqsort_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传递回比较块。第一个参数是被比较的左元素的值;第二个是右边的元素。