给定函数指针反转比较函数结果
Reversing a comparsion function result given it's function pointer
在我深入之前 - 这是一些家庭作业的一部分。但是,我已经尽了最大的努力,似乎无法弄清楚如何实现。
我得到了一个堆结构,它包含一个指向用于比较堆元素的比较函数的指针。但是,在特定情况下,需要反转给定比较函数(示例中的 strcmp)的值。如果 a<b
,堆调用的比较函数需要 return 一个正数,而不是 return 一个负数。
我无法修改任何使用堆结构的方法,也无法传入正确排序的方法。我可以创建另一个函数,然后给出一个指向它的指针。
编写一个新函数并指示堆将其用作比较器。这个新函数需要访问现有的比较器指针;它将使用现有的指针调用原始比较器,接收它的 return 值,"invert" 它和 return 反转结果给它自己的调用者(即堆)。
例如,这是一个 return 随机 奇数 整数的函数,并根据 return 完全随机整数的函数实现:
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
}
在我深入之前 - 这是一些家庭作业的一部分。但是,我已经尽了最大的努力,似乎无法弄清楚如何实现。
我得到了一个堆结构,它包含一个指向用于比较堆元素的比较函数的指针。但是,在特定情况下,需要反转给定比较函数(示例中的 strcmp)的值。如果 a<b
,堆调用的比较函数需要 return 一个正数,而不是 return 一个负数。
我无法修改任何使用堆结构的方法,也无法传入正确排序的方法。我可以创建另一个函数,然后给出一个指向它的指针。
编写一个新函数并指示堆将其用作比较器。这个新函数需要访问现有的比较器指针;它将使用现有的指针调用原始比较器,接收它的 return 值,"invert" 它和 return 反转结果给它自己的调用者(即堆)。
例如,这是一个 return 随机 奇数 整数的函数,并根据 return 完全随机整数的函数实现:
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
}