我对test
函数的结果感到困惑,-1
如下所示。
#include <stdio.h>
int test(const void*, const void*);
int main()
{
int a = 10, b = 5;
int result = test(&a, &b);
printf("Result: %d", result);
return 0;
}
int test(const void* a, const void* b) {
const double* da = (const double*)a;
const double* db = (const double*)b;
return (*da > * db) - (*da < *db);
}
0x0135fb00
now 是我的 da 值和 a 的地址
0x0135faf4
现在是我的 db 值和 b 的地址
据我所知,如果为真,则关系运算符返回 1,如果为假,则返回 0,所以在这种情况下,我们应该:
*da > *db --> 1
因为da
(a 的地址)的值大于db
(b 的地址)的值。
*da < *db --> 0
因为da
(a 的地址)的值不小于db
(b 的地址)的值。
所以 1-0 是 1。
只是为了说明,我通过调试器比较 da 的值和 db 的值得出了这个结论(我使用 Visual Studio 和默认的 C 编译器)。我错过了什么?
PS:我在GNU 官方网站上遇到过这段代码。