我有一位教授的任务我并不完全明白。这是我们指定的函数头:
PQueue createQueue( int (*cmp)(const void*a, const void*b) ) {
我找不到cmp的文档来理解函数本身的作用;它做了什么?
除此之外,当我编写用于创建队列的代码时,如何在createQueue中引用它?
答案 0 :(得分:2)
cmp
是createQueue
的参数,它是调用者传入的函数指针。通常cmp
它将返回:
*a
小于*b
*a
等于*b
,则*a
大于*b
这是标准库qsort
使用的约定,它在给定一些比较函数时对数组进行排序。
作为一个具体的例子,我们可以得到行为
int a = 1, b = 2, c = 2;
cmp(&a, &b); // returns < 0
cmp(&b, &c); // returns 0
cmp(&b, &a); // returns > 0
如果我们将cmp定义为
int cmp(const void * a, const void * b) {
const int * a_int_ptr = (const int *)a;
const int * b_int_ptr = (const int *)b;
int a_value = *a;
int b_value = *b;
return a_value - b_value;
}