理解 C 和 C 之间的 Void 指针差异
在编程领域,理解 C 和 C 之间的差异至关重要,尤其是当涉及到 void 指针时。一个常见的问题是,为什么特定的 C 代码编译成功,但在 C 中却失败。
在 C 与 C 中分配空指针
首先强调的问题是无法C 将 malloc() 返回的 void 指针分配给整数指针 (int*)。然而,在 C 中,由于其隐式转换,此类赋值是允许的。
C 的带有 Void 指针的显式转换
与 C 不同,C 强制执行显式转换将 void 指针分配给其他指针时。这意味着需要进行强制转换才能将 void 指针 (void) 转换为整数指针 (int)。
转换规则和 K&R2 原理
C 中的 K&R2 原则指出,任何指向对象的指针都可以转换为 void* 类型,而不会丢失数据。同样,将此 void 指针转换回其原始指针类型将保留原始值。
C 空指针转换标准
基于 C 原则,C标准进一步规定从 T 到 void 的转换保持隐式。但是,从 void* 到任何其他指针类型的转换必须显式强制转换。
总之,虽然 C 允许与 void 指针进行隐式转换,但从 void* 到其他指针类型的转换,C 需要显式强制转换。这种区别确保了类型安全并防止 C 代码中的潜在错误。
以上是为什么空指针赋值在 C 中有效但在 C 中失败?的详细内容。更多信息请关注PHP中文网其他相关文章!