bsearch 子例程

用途

执行二进制搜索。

标准 C 库 (libc.a)

语法

#include <stdlib.h>
void *bsearch (Key, Base, NumberOfElements, Size, ComparisonPointer)
const void *Key; 
const void *Base;
size_t NumberOfElements;
size_t Size;
int (*ComparisonPointer) (const void *, const void *);

描述

bsearch 子例程是二进制搜索例程。

bsearch子程序会搜索一个NumberOfElements对象数组(其初始成员由Base参数指向)以查找与Key参数指向的对象相匹配的成员 数组中每个成员的大小由 Size 参数指定。

必须已根据提供的比较函数 ComparisonPointer 参数按递增顺序对数组进行排序。

参数

描述
key 指向要在数组中寻找的对象。
基本 指向表底部的元素。
NumberOfElements 指定数组中的元素数。
ComparisonPointer 以该顺序指向比较函数,该比较函数通过指向 Key 参数对象和数组成员的两个自变量进行调用。
大小 指定数组中每个成员的大小。

返回值

如果在表中找到 Key 参数值,那么 bsearch 子例程将返回指向找到的元素的指针。

如果在表中找不到 Key 参数值,那么 bsearch 子例程将返回空值。 如果两个成员比较为相等,那么未指定匹配成员。

对于 ComparisonPointer 参数 比较函数会比较其参数并返回如下值:

  • 如果第一个参数小于第二个参数,那么 ComparisonPointer 参数返回小于 0 的值。
  • 如果第一个参数等于第二个参数,那么 ComparisonPointer 参数返回值 0。
  • 如果第一个参数大于第二个参数,那么 ComparisonPointer 参数返回大于 0 的值。

比较函数不需要对每个字节进行比较,因此除了要比较的值外,还可以在元素中包含任意数据。

KeyBase 参数应该是 "指针到元素" 类型,并强制转换为 "指针到字符" 类型。 虽然声明为 "指针到字符" 类型,但返回的值应强制转换为 "指针到元素" 类型。