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

时间:2015-10-21 11:34:24

标签: c++ pointers

int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}

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

3 个答案:

答案 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获取指针指向的值。

相关问题