[英]What does expression *(int*)a mean?
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
我不理解表达式*(int*)a
吗?
void *
指针是一个通用指针,它可以指向任何内容,但是由于编译器并不确切知道其指向的内容,因此必须告诉编译器其确切指向的内容。 这种“讲述”是强制转换的作用: (int *) a
告诉编译器a
实际上是指向int
。
然后,该代码仅使用解引用运算符(unary *
)来获取a
所指向的值,并在常规减法表达式中使用该值。
(int*)a
将a
强制转换为int*
。 简单地取消引用a
void
,因为*a
类型为void
,这是不允许的。
此外,这在某种程度上是不安全的,因为将a
作为const
传递,并且调用者希望*a
不被更改。 好的, a
确实没有改变,但是这样的显式转换应该很少。
附加的解引用“获取” a
指向的值。 最后,如果两个数据相等,则compare
返回0
。
(int*)a
将void指针转换为int类型的指针。 *(int*)a
采用指针指向的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.