[英]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 *)
函数作为回调传递给bsearch
和qsort
函数。 将参数定义为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.