繁体   English   中英

C语言中的复杂定义

[英]Complex definition in C

由于我很困惑,在下面的示例中,有人可以解释一下*(int*)a*(int*)b是什么,类型转换还是某些复杂的指针声明? 我需要使用bsearch函数。 谢谢

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

这是演员阵容。 a ,这是类型的const void * ,首先被浇铸到一个int * ,则该int *取消引用读取一个int

分解:

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

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

如果没有显式(且可能不安全)强制转换,则可读性更高的版本将是

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

    return *a - *b;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM