此代码是指针的练习代码。但我不理解此代码中的(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);
}
请详细说明如何评估。
答案 0 :(得分:2)
& p类型为void **,正被转换为要分配给q的int **类型。
SIDE-NOTE :"任何指针都可以分配给指向void的指针。然后它可以回到原来的状态 指针类型。发生这种情况时,该值将等于原始指针值。"
使用指针无效时要小心。如果你施放任意的 指向void的指针,没有什么能阻止你 将它转换为不同的指针类型。
答案 1 :(得分:2)
它是一个类型转换,它解释&p
的值,其类型为void **
,而不是类型int **
,它是存储值的变量的类型。
强制转换是必要的,因为void **
与void *
不同,并且不会自动转换为/从其他(数据)指针类型转换。这可能令人困惑。