mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-23 16:01:42 +00:00
bsearch.3: Improve the example.
Submitted by: fernape MFC after: 1 week Differential revision: https://reviews.freebsd.org/D19902
This commit is contained in:
parent
c73bd00a14
commit
345e740a1b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=350091
@ -32,7 +32,7 @@
|
||||
.\" @(#)bsearch.3 8.3 (Berkeley) 4/19/94
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd May 15, 2019
|
||||
.Dd July 17, 2019
|
||||
.Dt BSEARCH 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -93,26 +93,29 @@ A sample program that searches people by age in a sorted array:
|
||||
#include <string.h>
|
||||
|
||||
struct person {
|
||||
char name[5];
|
||||
int age;
|
||||
const char *name;
|
||||
int age;
|
||||
};
|
||||
|
||||
int
|
||||
compare(const void *key, const void *array_member)
|
||||
static int
|
||||
compare(const void *a, const void *b)
|
||||
{
|
||||
int age = (intptr_t) key;
|
||||
struct person person = *(struct person *) array_member;
|
||||
const int *age;
|
||||
const struct person *person;
|
||||
|
||||
return (age - person.age);
|
||||
age = a;
|
||||
person = b;
|
||||
|
||||
return (*age - person->age);
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
main(void)
|
||||
{
|
||||
struct person *friend;
|
||||
|
||||
int age;
|
||||
/* Sorted array */
|
||||
struct person friends[6] = {
|
||||
const struct person friends[] = {
|
||||
{ "paul", 22 },
|
||||
{ "anne", 25 },
|
||||
{ "fred", 25 },
|
||||
@ -120,22 +123,28 @@ main()
|
||||
{ "mark", 35 },
|
||||
{ "bill", 50 }
|
||||
};
|
||||
const size_t len = sizeof(friends) / sizeof(friends[0]);
|
||||
|
||||
size_t array_size = sizeof(friends) / sizeof(struct person);
|
||||
|
||||
friend = bsearch((void *)22, &friends, array_size, sizeof(struct person), compare);
|
||||
age = 22;
|
||||
friend = bsearch(&age, friends, len, sizeof(friends[0]), compare);
|
||||
assert(strcmp(friend->name, "paul") == 0);
|
||||
printf("name: %s\enage: %d\en", friend->name, friend->age);
|
||||
|
||||
friend = bsearch((void *)25, &friends, array_size, sizeof(struct person), compare);
|
||||
assert(strcmp(friend->name, "fred") == 0 || strcmp(friend->name, "anne") == 0);
|
||||
age = 25;
|
||||
friend = bsearch(&age, friends, len, sizeof(friends[0]), compare);
|
||||
|
||||
/*
|
||||
* For multiple elements with the same key, it is implementation
|
||||
* defined which will be returned
|
||||
*/
|
||||
assert(strcmp(friend->name, "fred") == 0 ||
|
||||
strcmp(friend->name, "anne") == 0);
|
||||
printf("name: %s\enage: %d\en", friend->name, friend->age);
|
||||
|
||||
friend = bsearch((void *)30, &friends, array_size, sizeof(struct person), compare);
|
||||
age = 30;
|
||||
friend = bsearch(&age, friends, len, sizeof(friends[0]), compare);
|
||||
assert(friend == NULL);
|
||||
printf("friend aged 30 not found\en");
|
||||
|
||||
return (EXIT_SUCCESS);
|
||||
}
|
||||
.Ed
|
||||
.Sh SEE ALSO
|
||||
|
Loading…
Reference in New Issue
Block a user