2014-10-29 109 views
0

我有一位教授的任务,我不完全理解。这是我们指定的功能标题:将函数* cmp(const * void,const * void)作为参数传递给C并使用它创建一个队列?

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

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

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

+0

您可以通过其名*,即'cmp'指函数参数。 – 2014-10-29 23:39:49

+0

例如,比如通过比较它被添加到队列的时间的优先级。 – BLUEPIXY 2014-10-29 23:47:17

+0

但是,当函数在队列创建函数中被引用时,这个函数实际上做了什么? – 2014-10-29 23:50:07

回答

2

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

  • 一个负整数如果*a小于*b
  • 0如果*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; 
} 
相关问题