将函数* cmp(const * void,const * void)作为C中的参数传递并使用它来创建队列?

时间:2014-10-29 23:38:16

标签: c queue

我有一位教授的任务我并不完全明白。这是我们指定的函数头:

PQueue createQueue( int (*cmp)(const void*a, const void*b) ) {

我找不到cmp的文档来理解函数本身的作用;它做了什么?

除此之外,当我编写用于创建队列的代码时,如何在createQueue中引用它?

1 个答案:

答案 0 :(得分:2)

cmpcreateQueue的参数,它是调用者传入的函数指针。通常cmp它将返回:

  • 如果*a小于*b
  • ,则为负整数 如果*a等于*b ,则
  • 0
  • 如果*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;
}