这是什么(int **)& p;声明中的意思?

时间:2015-10-23 12:11:32

标签: c pointers casting

此代码是指针的练习代码。但我不理解此代码中的(int**)&p;方法。

void fun(void *p);

int i;

int main()
{
  void *vptr;
  vptr = &i;
  fun(vptr);
  return 0;
}
void fun(void *p)
{
    int **q;
    q = (int**)&p;
    printf("%d\n", **q);
}

请详细说明如何评估。

2 个答案:

答案 0 :(得分:2)

& p类型为void **,正被转换为要分配给q的int **类型。

  

SIDE-NOTE "任何指针都可以分配给指向void的指针。然后它可以回到原来的状态   指针类型。发生这种情况时,该值将等于原始指针值。"

     

使用指针无效时要小心。如果你施放任意的   指向void的指针,没有什么能阻止你   将它转换为不同的指针类型。

答案 1 :(得分:2)

它是一个类型转换,它解释&p的值,其类型为void **,而不是类型int **,它是存储值的变量的类型。

强制转换是必要的,因为void **void *不同,并且不会自动转换为/从其他(数据)指针类型转换。这可能令人困惑。