二分查找 C

binary search C

这是二进制搜索函数的签名:

void *bsearch(const void *key, const void *base, size_t nmemb, size_t size,
              int (*compar)(const void *, const void *));

我不明白为什么我们要发送 void* 而不是 void** 作为数组指针,因为据我所知,如果我在 int 数组中寻找 int,我应该发送一个 int* 作为数组,而不是 int... 如果函数的签名是这样的话,实现会有很大的不同(或者可能无法实现):

void *bsearch(const void *key, <b>const void** base</b>, size_t nmemb, size_t size,
              int (*compar)(const void *, const void *));

提前致谢。

bsearch() 函数非常灵活,因为您可以将指针传递给 任何 类型的数组。将 base 参数更改为 const void **base 意味着您只能在指针数组上使用 bsearch()

如果您要搜索 int 的数组,那么您当然应该传递一个 void *,它是您数组的起始地址。