我对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);
}