我的目标是使用来自stdlib.h的qsort。qsort 需要一个比较函数参数来实现这一点:
int (*compar)(const void *, const void*)
我是否正确地将其理解为“指向 int 返回函数 f 的指针必须接受两个参数,它们是通用指针”?我不确定“*比较”周围括号的含义 - 我可以查找这个名字吗?
该链接提供了一个示例:
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
我会正确地将 *(int*)a 读成“在 a 被转换为指向整数的指针后取消引用它的值”吗?
干杯。
是的。您正确理解了这两种语法。*compar
周围的括号 ()
表示 compar
是函数指针。如果没有它,含义将完全不同。
你走在正确的道路上。
在第一个示例中,compar
称为函数指针。()
是函数指针语法的一部分。
请注意,如果没有 *compare
周围的显式 (),
compar
将被视为返回 int *
的功能,接受两个空
指针。
对于第二种情况,对于二进制减法运算符 -
,来自 C99
标准,第 6.5.6 章,第 3 段,
— 两个操作数都有算术类型;
— 这两个操作数都是指向兼容对象类型的限定或非限定版本的指针;或
— 左操作数是指向对象类型的指针,右操作数是整数类型。(递减等于减去 1。
关于第一点,算术类型
,来自第 6.2.5 章第 18 段,
整数和浮点类型统称为算术类型。
因此,在这里,在使用指针进行减法之前,将它们转换为 int
指针,然后取消引用,并且值用作整数减法的操作数。
我是否正确地将其理解为“指向 int 返回函数 f 的指针必须接受两个参数,它们是通用指针”?
完全正确。
我不确定 *compar
周围括号的含义
这是声明指向函数(称为“函数指针”)的指针的语法。如果没有参数,它将是一个函数声明
// Declares a function named compar. (It returns an int*.)
int *compar(const void *, const void*);
// Declares a function pointer named compar. (The func returns an int.)
int (*compar)(const void *, const void*);
我会正确地将 *(int*)
a 读成“在 a 被转换为指向整数的指针后取消引用它的值”吗?
再次更正。它给出了地址 a
处的 int
。
在下面的代码中,一旦我删除了比较字符串的注释部分,我就会出现seg 11错误。我无法理解为什么!其余代码运行良好。感谢任何帮助!
我想比较这两个函数的值。不幸的是,我试图使,但我一直得到。 我想检查如果。这就是我上面完整的代码。
比较函数是一个函数,它接受两个参数a和b,并返回一个描述其顺序的整数。如果a小于b,则结果为负整数。如果a大于b,则结果为某个正整数。否则,a和b相等,结果为零。 此函数通常用于参数化来自标准库的排序和搜索算法。 实现字符的比较功能相当容易;只需减去参数: 这是因为通常假设两个字符之间的差适合一个整数。(注意,此假设不适用于的系统) 这种技巧无法用于比较整数,因为两个整数之间的差通常不适合一个整数
有没有一个相当标准的C(Linux)函数,或者一种代码高效但性能良好的方法来比较任意大小的两个整数? 我正在寻找一些参数为int intcmp(const void*a,const void*b,size\t size)的东西,它适用于任何实际大小的整数。(如果架构是big-endian的话(我认为)可以工作。) 我倾向于使用这样的实现(通过高效整数比较函数的改进),但它不是完全通用的,并且有足够
过滤出数组中比较函数不返回 true 的所有值。 类似于difference ,除了接受一个 comparator (比较函数)。 使用 Array.filter() 和 Array.findIndex() 来查找合适的值。 const differenceWith = (arr, val, comp) => arr.filter(a => val.findIndex(b => comp(a, b
问题内容: 这怎么不出现属性错误?函数对象没有任何比较方法。它以某种方式使用id()吗? 我知道它比较地址,但是如何?拦截__lt , eq__等是一些低级黑客吗? 问题答案: 函数对象没有定义自己的比较或丰富的比较。相反,它们从类型对象继承,这些类型对象根据内存中的对象地址实现丰富的比较。 因此,是的,它像内置的id()函数一样有效地使用地址。 在Python 3中,功能不再可排序。
问题内容: 在python中,是没有重复元素的无序集合。但是,我无法理解它如何生成输出。 例如,考虑以下内容: 应该不是的输出是:?我在Python 2.6中尝试了以上两个。 问题答案: 正如您所说,集合是无序的。即使实现集合的一种方法是使用树,也可以使用哈希表来实现(这意味着按排序顺序获取键可能并不那么琐碎)。 如果您想对它们进行排序,则可以执行以下操作: 这将产生一个包含集合元素的排序列表。(
尝试编写一些干净的JS排序函数。下面是我的模板中一个按钮的click处理程序,它调用各个方法按不同的属性排序。 它调用下面的方法。它的工作很好,这是很好的! 我遇到的问题是,我已经有了大约4个这样的排序方法,我想把if语句放入它们自己的函数中,以便更好地编写干巴巴的代码。所以我尝试了下面的方法,但是compareFunction甚至从来没有调用过GET。我做错了什么?