繁体   English   中英

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

[英]Why type cast a void pointer?

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

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

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

  1. 如果要访问指针指向的内容( *(int*)p = 42
  2. 如果你实际上是在C和C ++的公共子集中编写代码,而不是“真正的”C.参见我是否转换了malloc的结果?

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 */
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM