bsearch

整列 (sort) 済みの配列から値を探索します.

#include <stdlib.h>
void *bsearch(
    const void *key,
    const void *base,
    size_t nmemb,
    size_t size,
    int (*compar)(const void *, const void *)
);

bsearch 関数は先頭要素を base が指すオブジェクトの配列 (要素数が nmemb 個,各要素の大きさが size である配列) から,key が指すオブジェクトに一致する要素を探索します.なお,base が指すオブジェクト配列は昇順に整列されている必要があります.

compar が指す比較関数は key オブジェクトへのポインタを第 1 引数とし,配列要素へのポインタを第 2 引数として呼び出されます.

compar が指す比較関数は以下のルールに基づいて実装する必要があります.

比較関数のルール

  • key オブジェクトが配列要素よりも小さい場合: 0 より小さい値を返す
  • key オブジェクトが配列要素と一致する場合: 0 を返す
  • key オブジェクトが配列要素よりも大きい場合: 0 より大きい値を返す

※ bsearch 関数の名前は 2 分探索 (binary Search) に由来しますが,内部で 2 分探索アルゴリズムを使用してる保障はありません.(処理系定義)

引数

  • key: 探索キー
  • base: 探索する配列
  • nmemb: 配列の要素数
  • size: 配列の個々の要素のサイズ
  • compar: 比較関数

戻り値

  • 一致する要素が見つかったとき: 配列中の一致する要素へのポインタ
  • 一致する要素が見つからなかったとき: 空ポインタ (NULL)

C言語サンプルプログラム

メモリ領域の内容から任意の値を探索するサンプルプログラムをご覧下さい.

Cプログラマの必読書

たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.

C実践プログラミング 第3版

C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります. オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.


C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.