【问题标题】:When to use a void pointer over a char pointer?何时在 char 指针上使用 void 指针?
【发布时间】:2019-05-24 17:18:57
【问题描述】:

在哪种情况下我们应该更喜欢 void 指针而不是 char 指针,反之亦然?

事实上,两者都可以转换为任何数据类型。

【问题讨论】:

  • 当您想在模块中隐藏数据结构并为用户提供“只是一个指针”以与您的模块进行交互时,您可以使用void 指针。
  • 感谢@PaulOgilvie 的回答,但我也可以使用 char 指针实现相同的功能,那为什么要使用 void 指针呢?
  • 这有点像问为什么你会在没有它的情况下“可以通过简单地不分配它来实现相同的功能”时将const 限定符放在某个东西上。但是能够传达含义(对人类读者和编译器)本身就有价值。

标签: c pointers void void-pointers


【解决方案1】:

void 指针是指向“任何类型”的指针,需要将其转换为指向实际类型的指针才能取消引用。

指向char 的指针是指向char 的指针,它恰好具有您也可以通过它访问(部分)其他类型的属性。

你应该使用void * 当意思是“任何类型”(或几种类型中的一种,等等)。当您访问char(显然)或其他类型的单个字节作为原始字节时,您应该使用char *。

【讨论】:

    【解决方案2】:

    当指针引用的变量类型未知时使用空指针。例如 malloc() 函数返回一个指向已分配内存的 void 指针。然后,您可以将指针转换为其他数据类型。

    在某些情况下,您可能需要创建一个指针来仅存储地址。您可以在那里使用 void 指针。

    【讨论】:

      【解决方案3】:

      更多的是关于代码可读性和结构,我不想看到一个函数需要输入,让我们说指向结构的指针并通过 char* 获取它,如果我看到 char* 是一个字符串(在纯 c 术语,字符数组,以 null 结尾),另一方面,使用 void* 我被警告要传递一些通用的东西,一个很好的例子是 qsort 函数。
      所以它不仅仅是关于它是否工作或编译,它也应该是可读的,

      【讨论】:

        猜你喜欢
        • 2014-05-30
        • 1970-01-01
        • 2016-02-15
        • 2011-10-27
        • 2016-01-20
        • 1970-01-01
        • 1970-01-01
        • 2019-05-23
        • 1970-01-01
        相关资源
        最近更新 更多