C 取消对指向另一个指针的空指针的引用

C 取消对指向另一个指针的空指针的引用,c,pointers,C,Pointers,我试图理解C-depplier,在我的一次涅盘冥想中,我得到了一个问题“如何取消指向另一种指针的空指针的引用”,我想下一个代码可能会更清楚: int a,b,*p1,*p2; void *p; a=3; b=6 p1=&a; p2=&b p=&p1; *p=p2 //How I could be able to do this? 在上面的代码中,我希望p1的值与p2的值相同,p2用作中间点p。我知道只做p1=p2会更好,但我想知道我上面写的是否可能void*指针不能被取

我试图理解C-depplier,在我的一次涅盘冥想中,我得到了一个问题“如何取消指向另一种指针的空指针的引用”,我想下一个代码可能会更清楚:

int a,b,*p1,*p2;
void *p;
a=3;
b=6
p1=&a;
p2=&b
p=&p1;
*p=p2 //How I could be able to do this?

在上面的代码中,我希望p1的值与p2的值相同,p2用作中间点p。我知道只做p1=p2会更好,但我想知道我上面写的是否可能

void*
指针不能被取消引用。只有在不想取消引用的情况下,它们才可用作中间指针存储。(想想
malloc

在取消引用
void*
指针之前,必须将其强制转换为非
void
类型

*((int * *) p) = p2;

在你的例子中会起作用。当然,你必须确保演员阵容是有意义的,否则可能会发生不好的事情。编译器将无法在此为您提供帮助。

如果您决定如何在机器代码或汇编中执行此操作,您可以回答自己的问题。C只是一个稍微高一点的、更便携的程序集。而且,一个空指针本身也没有用处。必须先将其强制转换或分配给其他指针类型。Void指针仅用于保存未知类型的指针。例如,供回调函数或事件消息使用。无法取消对void指针的引用。。。您需要首先强制转换它,否则编译器不知道目标的大小。那么@vanza,您知道在这种情况下如何强制转换它吗?我的意思是因为p1指向另一个pointer@ZanLynx我对汇编程序不太了解,我要去找他们谢谢,我有个问题,有必要对p2进行解引用,我的意思是因为我想要p2指定的地址?@KevinMejia不仅没有必要,而且完全错了。对不起,这是个打字错误。我会更正我的答案。