26

作为 C 的新手,我从 void 指针中得到的唯一实际用途是用于可以在给定指针中存储不同数据类型的通用函数。因此,在进行内存分配时,我没有对指针进行类型转换。

我见过一些有时使用 void 指针的代码示例,但它们会进行类型转换。为什么这很有用?为什么不直接创建所需类型的指针而不是 void?

4

2 回答 2

20

在 C 中将 void 指针强制转换为另一种类型有两个原因。

  1. 如果你想访问指针所指向的东西 ( *(int*)p = 42)
  2. 如果您实际上是在 C 和 C++ 的公共子集而不是“真正的”C 中编写代码。另请参阅我是否强制转换 malloc 的结果?

1 的原因应该很明显。第二是因为 C++ 不允许隐式转换void*到其他类型,而 C 允许。

于 2013-06-07T14:43:42.240 回答
14

如果要取消引用它们,则需要将 void 指针转换为其他东西,例如,您将 void 指针作为函数参数,并且您确定这是一个整数:

void some_function(void * some_param) {
    int some_value = *some_param; /* won't work, you can't dereference a void pointer */
}

void some_function(void * some_param) {
    int some_value = *((int *) some_param); /* ok */
}
于 2013-06-07T14:35:50.010 回答