Bildirim
void* bsearch(const void *key, const void *base, size_t num, size_t size, int (*compar)(const void*, const void*));
Açıklama
İlk eleman adresi base parametresi ile gösterilen, boyutu num parametre değeri kadar ve her bir eleman boyutu size parametre değeri kadar olan bir dizi içinde key parametresi ile gösterilen değeri arar.
Dizinin içeriği, değer karşılaştırma fonksiyonu ile uyumlu olacak şekilde, artan sırada olmalıdır.
Eğer aranan değer dizi içinde bulunursa, bulunan dizi elemanının adresini gösteren void* bir işaretçi değeri geri döndürülür.
Arama işlemi için, fonksiyon, key parametre değerini ilk parametre diğer dizi elemanlarını sırasıyla ikinci parametre olarak kullanarak, compar parametresi ile gösterilen fonksiyona bir seri çağrı yapar.
Parametreler
key: Dizi içinde aranacak olan değeri gösterir.
base: Aranacak dizinin ilk elemanının adresini gösterir.
num: Base parametresi ile gösterilen dizinin eleman sayısını gösterir.
size: Base parametresi ile gösterilen dizinin her bir elemanının boyutunu gösterir.
compar: Dizinin iki elemanını karşılaştıran fonksiyonun işaretçisidir.
Bu fonksiyon key parametresi ilk parametre olarak, diğer dizi elemanları sırasıyla ikinci parametre olarak kullanılarak çağrılır.
Fonksiyon aşağıdaki değerlerden birini geri döndürür.
Döndürülen değer | Anlamı |
---|---|
<0 | İlk parametre olan key değeri ikinci parametre değerinden önce gelir. |
0 | İlk parametre olan key değeri ikinci parametre değeri ile aynıdır. |
>0 | İlk parametre olan key değeri ikinci parametre değerinden sonra gelir. |
Dönüş değeri
Key parametresi ile gösterilen değer dizi içinde bulunduğunda, bulunan elemanın başlangıç adresi geri döndürülür. Eğer key parametre değeri dizi içinde bulunamazsa NULL bir işaretçi geri döndürülür.
Örnek
#include <stdio.h>
#include <stdlib.h>
int compfunc(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main (void) {
int *ip;
int key = 21;
int idizi[] = { 4, 5, 9, 11, 14, 16, 17, 21, 35, 43 };
int num = sizeof(idizi) / sizeof(idizi[0]);
ip = (int*) bsearch (&key, idizi, num, sizeof (int), compfunc);
if(ip != NULL) printf("Bulunan değer: %d\n", *ip);
else printf("%d değeri bulunamadı!\n", key);
key = 30;
ip = (int*) bsearch (&key, idizi, num, sizeof (int), compfunc);
if(ip != NULL) printf("Bulunan değer: %d\n", *ip);
else printf("%d değeri bulunamadı!\n", key);
return 0;
}
Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:
Bulunan değer: 21 30 değeri bulunamadı!
Yukarıdaki program, 10 boyutlu int bir dizi içinde önce bulunan bir değişken değerini sonra da bulunmayan bir değişken değerini bsearch() fonksiyonu ile arayarak sonuçları ekrana yazar.