int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
我不理解表达式*(int*)a
?
答案 0 :(得分:8)
一个void *
指针是一个通用指针,它可以指向任何东西,但由于编译器并不完全知道它指向什么你必须告诉编译器究竟是什么指向。这个“告诉”是演员的作用:(int *) a
告诉编译器a
实际指向int
。
然后代码只是使用解除引用运算符(一元*
)来获取a
所指向的值,并在正常的减法表达式中使用它。
答案 1 :(得分:4)
(int*)a
将a
投射到int*
。简单地取消引用a
不起作用,因为*a
的类型为void
,这是不允许的。
此外,这在某种程度上是不安全的,因为a
作为const
传递,并且调用者希望*a
不被更改。好的,a
确实没有改变,但这种明确的转换应该是罕见的。
额外解除引用“得到”值a
指向。最后,如果两个数据相等,compare
将返回0
。
答案 2 :(得分:0)
(int*)a
将void指针转换为int类型指针。 *(int*)a
获取指针指向的值。