作为C的新手,我从void指针中获得的唯一实际用法是用于在给定指针中存储不同数据类型的通用函数。因此,在进行内存分配时,我没有输入指针。
我见过一些有时使用void指针的代码示例,但是它们是类型转换的。为什么这有用?为什么不直接创建所需类型的指针而不是void?
答案 0 :(得分:16)
在C中将void指针强制转换为另一种类型有两个原因。
*(int*)p = 42
) 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 */
}