c-关系运算符



我对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现在是我的da值和a的地址
0x0135faf4现在是我数据库的值和b的地址

据我所知,关系运算符如果为True则返回1,如果为False则返回0,因此在这种情况下,我们应该有:

*da > *db --> 1
,因为da的值(a的地址(大于db的值(b的地址(
*da < *db --> 0
因为da的值(a的地址(不小于db的值(b的地址(
所以1-0就是1。
具体来说,我是通过调试器比较da的值和db的值得出这个结论的(我使用的是带有默认C编译器的Visual Studio(。我错过了什么?
附言:我在GNU官方网站上遇到过这个代码。

在你的问题中,你说:

*da > *db --> 1

,因为da的值(a的地址(大于db的值(b的地址(。

但是,当您取消引用指针(使用*运算符(时,上面的语句会测试da指向的内容是否大于db所指向

如果您真的想比较地址,请忽略*,即:

(da > db) - (da < db)

如果您的最终目标是比较地址,则不需要投射void指针,因此您可以按如下方式重写test

int test(const void *a, const void *b) {
return (a > b) - (a < b);
}

最新更新