---
name: "bsearch"
section: "3"
platform: "macos"
package: "Libc"
version: "1752.120.2"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/bsearch"
---

# bsearch(3)

binary search of a sorted table

## NAME

\#ifdef UNIFDEF\_BLOCKS **bsearch**, **bsearch\_b** #else **bsearch** #endif – binary search of a sorted table

## SYNOPSIS

**#include \<stdlib.h\>**

*void* *\**\

**bsearch**(*const void \*key*, *const void \*base*, *size\_t nel*, *size\_t width*, *int (\*compar) (const void \*, const void \*)*); #ifdef UNIFDEF\_BLOCKS

*void* *\**\

**bsearch\_b**(*const void \*key*, *const void \*base*, *size\_t nel*, *size\_t width*, *int (^compar) (const void \*, const void \*)*); #endif

## DESCRIPTION

The **bsearch**() function searches an array of *nel* objects, the initial member of which is pointed to by *base*, for a member that matches the object pointed to by *key*. The size (in bytes) of each member of the array is specified by *width*.

The contents of the array should be in ascending sorted order according to the comparison function referenced by *compar*. The *compar* routine is expected to have two arguments which point to the *key* object and to an array member, in that order. It should return an integer which is less than, equal to, or greater than zero if the *key* object is found, respectively, to be less than, to match, or be greater than the array member. #ifdef UNIFDEF\_BLOCKS

The **bsearch\_b**() function is like **bsearch**() except the callback *compar* is a block pointer instead of a function pointer. #endif

## RETURN VALUES

The **bsearch**() #ifdef UNIFDEF\_BLOCKS and **bsearch\_b**() functions #else function #endif returns a pointer to a matching member of the array, or a null pointer if no match is found. If two members compare as equal, which member is matched is unspecified.

## SEE ALSO

[db(3)](/db/3.md), [lsearch(3)](/lsearch/3.md), [qsort(3)](/qsort/3.md)

## STANDARDS

The **bsearch**() function conforms to ISO/IEC 9899:1990 (“ISO C90”).
