为什么要输入一个void指针?

时间:2013-06-07 14:11:56

标签: c types casting malloc

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

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

2 个答案:

答案 0 :(得分:16)

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

  1. 如果要访问指针指向的内容(*(int*)p = 42
  2. 如果您实际上是在C和C ++的公共子集中编写代码,而不是“真实”C.另请参阅Do I cast the result of malloc?
  3. 1的原因应该是显而易见的。第二是因为C ++不允许从void*到其他类型的隐式转换,而C允许它。

答案 1 :(得分:9)

如果你想取消引用它们,你需要将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 */
}