我对c语言中的void指针有疑问。我想知道我们可以在不知道类型的情况下取消引用无效指针吗?
答案 0 :(得分:1)
不,因为您不知道如何解释相应内存空间所包含的数据。内存本身没有类型,它是包含类型信息的指针。例如,int *
指向的内存被解释为int
。
取消引用void *
时,编译器无法判断从该地址开始的哪个类型字节应该被解释为。它可以是double
,unsigned long
,甚至是char
的数组。
但是,通过强制转换可以取消引用void *
,因为强制转换操作符包含有关对象类型的信息。
答案 1 :(得分:0)
TL; DR 不,你不能。
在解除引用指向类型的指针时,会生成类型的“对象”。
由于void
不是完整类型,因此您无法直接取消引用void*
。这就是为什么你需要
然后,您可以取消引用以获取 new 完整类型的对象。
答案 2 :(得分:0)
不,只有在显式转换后才能取消引用无效指针。例如:
Java EE
答案 3 :(得分:0)
你做不到。取消引用void指针需要事先进行显式转换。
您可以将其转换为任何特定类型,然后在不知道其原始类型的情况下取消引用它,但为什么您希望这样做是超出我的。