C中的复杂定义

时间:2016-09-10 18:24:58

标签: c pointers casting

因为我感到困惑,有人可以解释一下*(int*)a*(int*)b在下面的示例中是什么,输入类型转换或一些复杂的指针声明?我需要使用bsearch功能。感谢

int cmpfunc(const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}

2 个答案:

答案 0 :(得分:3)

这是演员。 a类型const void *首先投放到int *,然后取消引用int *以阅读int

打破它:

  • a:输入const void *
  • (int *)a:输入int *
  • *(int *)a:输入int

这样做的原因是因为需要将int (*)(const void *, const void *)类型的函数作为回调传递给bsearchqsort函数。将参数定义为const void *允许qsort通过让回调函数将参数转换为适当的类型来对任意数据进行排序。

答案 1 :(得分:0)

没有明确(且可能不安全)的强制转换的更具可读性的版本将是

int cmpfunc(const void * a_, const void * b_)
{
    int const *a = a_;
    int const *b = b_;

    return *a - *b;
}