bsearch_s函数
概要:
#define __STDC_WANT_LIB_EXT1__ 1 #include <stdlib.h> void *bsearch_s(const void *key, const void *base, rsize_t nmemb, rsize_t size, int (*compar)(const void *k, const void *y, void *context), void *context);
描述:
该函数在nmemb个元素的数组中搜索与参数key指向对象相匹配的元素,参数base指向数组的初始元素。单个数组元素的大小由参数size指定。
参数compar指向的比较函数存在三个参数:第一个参数是bsearch_s函数的参数key;第二个参数是指向数组元素的指针;第三个参数是bsearch_s函数的参数context。如果参数key指向对象大于、小于或者等于数组元素,比较函数将返回一个大于、小于或者等于0的整数。数组中所有元素按从小到大的顺序排列(实际上这意味着整个数组已经根据比较函数进行了排序。)。
参数context对于bsearch_s函数的唯一用处是传递给比较函数用作第三个参数;比较函数执行时,该参数提供附加信息,例如:指定比较函数使用的排序序列(collating sequence)。
运行约束:
参数nmemb和参数size不能大于宏RSIZE_MAX。如果参数nmemb不等于0,参数key、base和compar不能是空指针。
如果存在运行约束冲突,bsearch_s函数不会搜索数组。
参数:
指向搜索对象的指针。
指向数组初始元素的指针。
数组长度。
单个数组元素的字节数。
指向比较函数的指针。比较函数会被bsearch_s函数反复调用,用以比较参数key指向对象和数组元素。第一个参数总是参数key,第二个参数是指向数组元素的指针。比较函数中参数context与bsearch_s函数中参数context是相同的。
如果参数key指向对象大于、小于或者等于数组元素,比较函数将返回一个大于、小于或者等于0的整数。
传递给比较函数用作第三个参数,比较函数执行时使用,例如:指定比较函数使用的排序序列(collating sequence)。
返回值:
如果发现与参数key指向对象相匹配的元素,函数返回指向该元素的指针;如果存在多个匹配元素,ISO/IEC 9899:2018标准未明确说明匹配哪个元素。如果未发现与参数key指向对象相匹配的元素或者存在运行约束冲突,函数返回空指针。
范例:
|
|
输出:
25 is found.
注:使用Visual Studio编译。
Visual Studio中qsort_s函数和bsearch_s函数中的比较函数与ISO/IEC 9899:2018标准有差异。Visual Studio中,比较函数比较的是后两个参数的大小;ISO/IEC 9899:2018标准中,比较函数比较的是前两个参数的大小。
相关内容:
bsearch | 搜索匹配数组元素的函数。 |
qsort_s | 对数组元素进行排序的安全函数。 |