日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトル
目次
まえがき
リファレンス・セクション
   ≫ライブラリ関数一覧
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)


目次 索引




バイナリ検索を実行します。ソートされたオブジェクトの配列から指定のオブジェクトを検索します。

形式

#include <stdlib.h>

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

関数バリアント bsearch関数には, _bsearch32および _bsearch64という名前のバリアントがあり,それぞれ 32 ビット・ポインタ・サイズおよび 64 ビット・ポインタ・サイズで使用されます。ポインタ・サイズ固有の関数の使い方の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.9 節を参照してください。

引数



key

配列内で検索するオブジェクトを指すポインタ。このポインタは,pointer-to-object 型で,pointer-to-void 型にキャストされなければなりません。

base

配列の最初のメンバを指すポインタ。このポインタは pointer-to-object 型で,pointer-to-void 型にキャストされなければなりません。

nmemb

配列内のオブジェクトの数。

size

オブジェクトのサイズ (バイト数)。

compar

比較関数を指すポインタ。

説明

配列はまず,compar によって示される比較関数に従って,昇順にソートする必要があります。

compar によって示される比較関数に 2 つの引数が渡されます。 2 つの引数は比較するオブジェクトを示します。最初の引数が 2 番目の引数より小さいか,等しいか,大きいかに応じて,比較関数は 0 より小さい整数,0,0 より大きい引数を返さなければなりません。

比較関数 (compar) が配列内のすべてのバイトを比較する必要はありません。したがって,配列内のオブジェクトには,比較するデータの他に任意のデータを格納することができます。

返される値は pointer-to-void 型として宣言されるため, pointer-to-object 型にキャストされるかまたは割り当てられなければなりません。


戻り値

x 配列内で一致するメンバを指すポインタ。一致するメンバが見つからない場合はヌル・ポインタ。
NULL キーが配列から見つからなかったことを示します。


 
#include <stdio.h> 
#include <stdlib.h> 
 
#define SSIZE 30 
 
extern int compare();  /* prototype for comparison function */ 
 
int array[SSIZE] = {30, 1, 29, 2, 28, 3, 27, 4, 26, 5, 
                    24, 6, 23, 7, 22, 8, 21, 9, 20, 10, 
                    19, 11, 18, 12, 17, 13, 16, 14, 15, 25}; 
 
/*  This program takes an unsorted array, sorts it using qsort, */ 
/*  and then calls bsearch for each element in the array,       */ 
/*  making sure that bsearch returns the correct element.       */ 
 
main() 
{ 
    int i; 
    int failure = FALSE; 
    int *rkey; 
 
    qsort(array, SSIZE, sizeof (array[0]), &compare); 
 
    /* search for each element */ 
    for (i = 0; i < SSIZE - 1; i++) { 
        /* search array element i */ 
        rkey = bsearch((array + i), array, SSIZE, 
                        sizeof(array[0]), &compare); 
        /* check for successful search */ 
        if (&array[i] != rkey) { 
            printf("Not in array, array element %d\n", i); 
            failure = TRUE; 
            break; 
        } 
    } 
    if (!failure) 
        printf("All elements successfully found!\n"); 
} 
 
/*  Simple comparison routine.  */ 
/*                              */ 
/*  Returns:  = 0 if a == b     */ 
/*            < 0 if a < b      */ 
/*            > 0 if a > b      */ 
 
int compare(int *a, int *b) 
{ 
    return (*a - *b); 
} 

このサンプル・プログラムでは,次の出力が生成されます。

All elements successfully found! 


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.