0

从 cppreference,

为了执行搜索,该函数执行一系列调用以比较 key 作为第一个参数,并将 base 指向的数组元素作为第二个参数。

对于给定的数组int arr[] = {1, 2, 3, 4, 5, 6, 7},搜索6需要将回调函数传递给的元素bsearch。我的int compar (const void* pkey, const void* pelem);函数是否需要能够返回以下三种情况之一:

  • 返回 < 0
  • 返回 > 0
  • 返回 0

还是仅仅为了相等而实现compar函数就足够了(例如,当搜索值等于当前元素时返回 0)?

4

1 回答 1

2

您的比较函数必须为所有可能的输入返回正确的返回值。此外,向量必须与比较函数一致地排序:如果该值 在向量中位于a之前b,则compar(&a, &b)必须小于或等于 0。bsearch不检查,但如果不是这种情况,bsearch可能会返回错误结果。或者更糟。

无论如何,如果这就是您的意思,则不可能实现仅有时返回值的函数。除非不使用函数的返回值,否则函数必须返回一些东西。C 并没有强制执行这个要求,但是如果你忽略它,你的程序就会有 Undefined Behaviour,这意味着会发生不好的事情。

于 2021-01-01T18:15:00.543 回答