【发布时间】:2016-09-10 18:24:57
【问题描述】:
因为我一直很困惑,谁能解释一下下面的例子中*(int*)a或*(int*)b是什么,类型转换或一些复杂的指针声明?我需要使用 bsearch 功能。谢谢
int cmpfunc(const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
【问题讨论】:
-
它将
void *转换为int *,然后解除对它的引用以访问它指向的int。据推测,这些void *参数指向ints。 -
表达式中间不能有声明。
(int *)转换为指向 int 的指针;前面的*取消引用指针。 -
附带说明,使用减法检查哪个
int更大是不可靠的,除非您可以确定减法不会上溢/下溢。 -
您的编译器应该大声疾呼抛弃
const限定符。假设指针确实是int *,则演员表应该是const int *。