- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要么 cmp func 似乎工作;无法理解在 qsort_cmp 的情况下如何解析 int* 类型的 arg1。
据我所知:int* 被传递给 qsort_cmp,在那里它被更改为 void*,然后在 return 语句中转换为 struct s*。到目前为止没问题,但是转换对象应该有一个名为 b 的成员,它的转换类型有但它的实例没有......
struct s { int a, b; };
int qsort_cmp(const void *r1, const void *r2) {
return ((struct s*) r1)->b - ((struct s*) r2)->b;
}
int bsearch_cmp(const void *key, const void *r2) {
return *(int*) key - ((struct s*) r2)->b;
}
/* themap is already qsorted */
int k = 'w'//hatever;
void *ret = bsearch(&k, themap, thenumber_ofelements, sizeof(one_element), qsort_cmp);
最佳答案
这些比较函数不可互换:比较b
两个参数的字段,另一个比较 int
第一个参数和 b
直接指向第二个参数指向的结构的字段。如果 a
,它们将是等效的使用字段代替 b
,作为 a
字段位于结构的开头。
这是规范:
7.22.5.1 The bsearch function
[...]
The comparison function pointed to by
compar
is called with two arguments that point to the key object and to an array element, in that order. The function shall return an integer less than, equal to, or greater than zero if the key object is considered, respectively, to be less than, to match, or to be greater than the array element.
int
的指针。而第二个是指向结构数组的指针,只要比较函数与
bsearch
一致即可调用方案
qsort
中使用的比较函数使用 2 个指向数组元素的指针调用,因此它们都是指向
s
的指针。结构。
int
values 不是产生比较结果的可靠方法,因为此减法可能会导致许多值溢出:
INT_MIN - 1
例如。更好的方法是这样的:
struct s { int a, b; };
int qsort_cmp(const void *r1, const void *r2) {
const struct s *s1 = r1;
const struct s *s2 = r2;
return (s2->b < s1->b) - (s1->b < s2->b);
}
int bsearch_cmp(const void *key, const void *r2) {
const int *ip = key;
const struct s *s2 = r2;
return (s2->b < *ip) - (*ip < s2->b);
}
现代编译器为此生成无分支代码:
https://godbolt.org/z/sW3dn6
关于c - bsearch 的不同比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66129300/
要么 cmp func 似乎工作;无法理解在 qsort_cmp 的情况下如何解析 int* 类型的 arg1。 据我所知:int* 被传递给 qsort_cmp,在那里它被更改为 void*,然后在
我有一个看起来像这样的结构: typedef struct dictionary_t{ char word[30]; int foo; int bar; } dictionar
我有一个struct employee比较器和main: #define MAX_SIZE 20 typedef struct Employee{ char name[MAX_SIZE];
我有一个按降序排序的数组,没有重复项。我可以使用 libc 中的 bsearch 函数对其执行二分搜索吗?为此,我是否需要更改传递给它的比较函数? 谢谢 最佳答案 是的,您可以使用bsearch。您需
我有一个结构: typedef struct entry_t { char * name; int lines [MAX]; int n;/*n lines*/ } entry_t; 和一
已修复。 包括 main() { int n; int i; char tempMonth[255]; //Used to store the month until chec
我在进行此搜索时遇到了问题。我非常确定我已经将问题与 bsearch 接受的字节数参数隔离开来。数据数组是一个拼字词典,我 100% 确定整个字典已加载到内存中,但是当我使用 bsearch 时尝试查
我有函数调用 userInteractive(*anangramInfo) ,它传入结构 anangramInfo 的指针,并且该结构包含指向实际字谜词的指针“anagramPointer”。所以,我
我正在尝试在预先排序的数组中查找用户输入的字符串。如果我编写自己的二分查找函数,输入就会被正确找到。如果我使用 C bsearch,我总是得到一个 NULL 指针。 这是相关的代码片段: printf
谁能告诉我为什么以下代码中的 bsearch() 在列表中找不到项目“getwidth”?我尝试了几个编译器,但它们都不适用,所以它一定是我的代码中的一个错误。但是,我真的看不出那里有什么问题。传递给
我正在努力在我的代码中执行 bsearch() 中的比较功能。显然,我想根据包含结构 (word_dict_t) 的字典数组上的键字符串(来自链表)进行二进制搜索 typedef struct {
有没有办法做这样的事情? int key=50; int loop=5; int array[10]={...}; int* Ptr=NULL; qsort(array, 10, sizeof(int
在 C 中使用 bsearch 未能在结构数组中找到字符串“Eva Lam”。此数组按字符串成员的降序排序。检查了很多次,还是不知道bug在哪里?顺便说一句,我正在使用 DEV C++ 5.9.4。请
bsearch 非常适合直接搜索,但是如果我需要例如搜索范围,我应该使用什么? 更新 例如,如果我想找到 a 和 b 之间的值范围 (a >= x < b)。 更新 范围值可以不相等。所以如果我有数组
我有以下程序: #include #include #include #include #include #define DICT_BUFSIZE 64 int compar(const v
我有一个未分类的字典文件,名为“dict.txt”。我已经设法将文件中的单词放入数组中,而且我使用的 qsort() 似乎也工作正常(也就是说,数组已排序)。 当我调用 bsearch() 时出现问题
我有一个指向整数的地址数组(这些整数升序排列)。它们具有重复值。例如:1,2、2、3、3、3、3、4、4…… 我正在尝试获取所有大于 a 的值一定的值(value)(关键)。目前正在尝试使用二进制来实
我有一个这样的数组: typedef struct INSTR { char* str; int argc; } INSTR; const static INSTR instruct
在 C(标准库)中使用 bsearch() 可以快速找到排序数组中的条目。 但是,如何计算插入新条目的位置(使用标准库)? bsearch() 专门检查找到的项目的键是否等于传递的键,如果不是,则返回
我在尝试对 C 中的字符串数组使用 c 内置 bsearch 时遇到一些令人困惑的行为。这是代码。我知道您可以使用内置的 strcmp 来搜索字符串数组,但我包含了 myStrCmp 用于调试目的,因
我是一名优秀的程序员,十分优秀!