🔧 標準ライブラリ ・ stdlib.h ・ C89
bsearch の使い方void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
ソート済み配列に対して二分探索を行う汎用関数。qsortと同じ比較関数を使い、対象データを高速に探索する。配列が未ソートだと正しく動作しない前提付きの関数。 見つからない場合はNULLを返すため、戻り値のチェックを忘れると存在確認ロジックが正しく働かない。
#include <stdlib.h>
#include <stdio.h>
int cmp(const void *a, const void *b) {
int x = *(const int *)a, y = *(const int *)b;
return (x > y) - (x < y);
}
int main(void) {
int arr[] = {1, 2, 3, 4, 5};
int key = 3;
int *found = bsearch(&key, arr, 5, sizeof(int), cmp);
if (found) printf("found: %d\n", *found);
return 0;
}
⚠️ 配列が事前にソートされていないと結果は未定義。事前にqsortでソートしておく必要がある。
アプリの関数リファレンスで引く(無料・登録不要) 関数一覧へ
bsearch と一緒に使う関数もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。