作为 C 的新手,我从 void 指针中得到的唯一实际用途是用于可以在给定指针中存储不同数据类型的通用函数。因此,在进行内存分配时,我没有对指针进行类型转换。
我见过一些有时使用 void 指针的代码示例,但它们会进行类型转换。为什么这很有用?为什么不直接创建所需类型的指针而不是 void?
在 C 中将 void 指针强制转换为另一种类型有两个原因。
*(int*)p = 42
)1 的原因应该很明显。第二是因为 C++ 不允许隐式转换void*
到其他类型,而 C 允许。
如果要取消引用它们,则需要将 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 */
}