c - 在给定函数指针的情况下反转比较函数结果

标签 c function-pointers

在我深入探讨之前 - 这是一些家庭作业的一部分。然而,我已经尽了最大的努力,但似乎无法弄清楚如何实现这一点。

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

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

最佳答案

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

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

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
}

关于c - 在给定函数指针的情况下反转比较函数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29220184/

相关文章:

c++ - 如何将 13 位值映射到 4 位代码?

c - 如何拦截 linux 信号? (在 C 中)

c - 使用 malloc 作为 typedef char name[300][300]? (C)

c++ - 使用函数指针进行结构初始化

c++ - 如果它不是函数指针,那它是什么?

c - 大O小澄清

c - 在 Arduino 上使用 C 中 PROGMEM 中的结构函数指针

C函数指针赋值

c++ - 静态与外部 "C"/"C++"

c++ - 最令人烦恼的解析困惑