void 实际上并不是一个特定的类型。那么系统如何判断内存块的结尾从而加密数据 block 的值呢?如果您知道内存中的数据,那么您当然可以将类型从 void 更改为特定类型,但是当您不知道时呢?语言设计者提出这个概念的目的是什么?
最佳答案
这主要在 C 中用于将数据传递给回调函数或构建通用容器。每当您想要从具体数据类型中进行抽象时,就会使用它。类型“void *”只能传递指针,有时这就是您所需要的。
但是你是对的,如果你想实际访问数据,你必须在某个时候将指针类型转换回具体的数据类型。所以一些代码必须真正记住类型(并且它必须正确,否则你读到的都是垃圾!)。但并非所有代码都必须知道类型。有些函数可以将其称为“void *”,因此更加抽象:然后,链表可用于包含字符串或矩阵或任何您想要的内容,而无需为每种类型重新编程列表代码。
在 C++ 中,您可以通过在回调数据的情况下使用继承(接口(interface))或在容器的情况下使用模板来避免潜在的不安全转换。
顺便说一句。在 C/C++ 中,很多情况下你实际上无法知道“数据 block 的结尾”,这对于“void *”指针来说并不特殊。这就是为什么存在如此多危险的缓冲区溢出的原因。
关于c++ - 如何使用void指针(void*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27037293/