给定其函数指针反转比较函数结果

时间:2015-03-23 20:54:52

标签: c function-pointers

在我走得太远之前 - 这是一些功课的一部分。但是,我已经给了我最好的尝试,似乎无法弄清楚如何实现这一目标。

我得到一个堆结构,它包含一个指向比较函数的指针,用于比较堆的元素。但是,在特定情况下,需要反转给定的比较函数(示例中的strcmp)的值。如果a<b,则不是返回负数,而是由堆调用的比较函数需要返回正数。

我无法修改任何使用堆结构的方法,也无法传入正确排序的方法。我可以创建另一个函数,然后给出一个指针。

1 个答案:

答案 0 :(得分:1)

编写一个新函数并指示堆将其用作比较器。这个新函数需要访问现有的比较器指针;它将使用现有指针调用原始比较器,接收其返回值,“反转”它并将反转结果返回给它自己的调用者(即堆)。

例如,这是一个返回随机奇数整数的函数,并以一个返回完全随机整数的函数实现:

int totally_random() {
    return 4; // chosen by fair die roll
}

int (*pointer)();
pointer = totally_random;

int odd_random() {
    int result = *pointer(); // passed in through a global but alternatives exist
    return result & 1 ? result : result + 1; // if even, add one to make odd
}