因为我感到困惑,有人可以解释一下*(int*)a
或*(int*)b
在下面的示例中是什么,输入类型转换或一些复杂的指针声明?我需要使用bsearch功能。感谢
int cmpfunc(const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
答案 0 :(得分:3)
这是演员。 a
类型const void *
首先投放到int *
,然后取消引用int *
以阅读int
。
打破它:
a
:输入const void *
(int *)a
:输入int *
*(int *)a
:输入int
。这样做的原因是因为需要将int (*)(const void *, const void *)
类型的函数作为回调传递给bsearch
和qsort
函数。将参数定义为const void *
允许qsort
通过让回调函数将参数转换为适当的类型来对任意数据进行排序。
答案 1 :(得分:0)
没有明确(且可能不安全)的强制转换的更具可读性的版本将是
int cmpfunc(const void * a_, const void * b_)
{
int const *a = a_;
int const *b = b_;
return *a - *b;
}