繁体   English   中英

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

[英]Can we dereference a void pointer without knowing its type?

我有一个关于 c 语言中的 void 指针的问题。 我想知道我们可以在不知道其类型的情况下取消引用void 指针吗?

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

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

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

TL;DR不,你不能。

虽然解引用指针到类型,则产生一个的类型的“对象”。

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

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

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

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

int a = 5;
void *b = &a;
printf(“%d\n”, *((int*)b));

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

您当然可以将其转换为任何特定类型,然后在不知道其原始类型的情况下取消引用它,但我无法理解您为什么要这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM