表达式*(int*)a是什么意思?

What does expression *(int*)a mean?

本文关键字:是什么 意思 int 表达式      更新时间:2023-10-16
int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}

我不理解表达*(int*)a ?

一个void *指针是一个通用的指针,它可以指向任何东西,但由于编译器不知道确切的什么它指向你必须告诉编译器它到底指向什么。这种"告诉"就是强制转换所做的:(int *) a告诉编译器a实际上指向int

然后代码只是使用解引用运算符(一元*)来获取a所指向的位置的值,并在正常的减法表达式中使用该值。

(int*)a

a转换为int*。简单地解引用a是行不通的,因为*a的类型是void,这是不允许的。

此外,这在这里有点不安全,因为a作为const传递,而调用者希望*a不被更改。好吧,a确实没有改变,但这样显式的转换应该是罕见的。

额外的解引用"获取"a指向的值。最后,如果两个数据相等,compare返回0

(int*)a将void指针转换为int类型指针。*(int*)a取指针指向的值