我们可以在不知道其类型的情况下取消引用void指针吗?

时间:2016-04-29 07:03:08

标签: c

我对c语言中的void指针有疑问。我想知道我们可以在不知道类型的情况下取消引用无效指针吗?

4 个答案:

答案 0 :(得分:1)

不,因为您不知道如何解释相应内存空间所包含的数据。内存本身没有类型,它是包含类型信息的指针。例如,int *指向的内存被解释为int

取消引用void *时,编译器无法判断从该地址开始的哪个类型字节应该被解释为。它可以是doubleunsigned long,甚至是char的数组。

但是,通过强制转换可以取消引用void *,因为强制转换操作符包含有关对象类型的信息。

答案 1 :(得分:0)

TL; DR 不,你不能。

在解除引用指向类型的指针时,会生成类型的“对象”。

由于void不是完整类型,因此您无法直接取消引用void*。这就是为什么你需要

  • 将指针复制到另一个完整类型的指针
  • 将指针强制转换为另一个完整类型

然后,您可以取消引用以获取 new 完整类型的对象。

答案 2 :(得分:0)

不,只有在显式转换后才能取消引用无效指针。例如:

Java EE

答案 3 :(得分:0)

你做不到。取消引用void指针需要事先进行显式转换。

您可以将其转换为任何特定类型,然后在不知道其原始类型的情况下取消引用它,但为什么您希望这样做是超出我的。