【问题标题】:what is the practical use of void datatype and void pointer?void 数据类型和 void 指针的实际用途是什么?
【发布时间】:2013-05-14 17:44:29
【问题描述】:

void 变量无关,而且 void 指针只能通过强制转换来指向。 因此,当我们实际上不知道要指向的位置和数据类型时,会使用 void 指针。但是什么是 void 变量呢?

有什么实际的例子吗?

【问题讨论】:

  • 你的意思是void v;?这在任何语言中都不存在。
  • 我认为它与 C 的关系比 C# 更重要

标签: c# c void void-pointers


【解决方案1】:

没有 void 变量,但有 void 指针。 正如其他人提到的那样,我想提醒您在使用 void 指针之前进行类型转换。

float generic_add(void *n1, void *n2){
    return *((int *) n1) + *((float *) n2);
}

【讨论】:

    【解决方案2】:

    它们在通用接口中很有用,例如经典的qsort

    void
     qsort(void *base, size_t nel, size_t width,
         int (*compar)(const void *, const void *));
    

    http://www.manpagez.com/man/3/qsort/

    void 返回类型将其标识为过程而不是函数,因为它根本不返回任何数据(任何类型)。 void *s 可以指向任何东西,但 compar 函数必须适当地转换它们才能使用它们。

    【讨论】:

      【解决方案3】:

      正如 Marko Topolnik 在他的评论中所说,没有 void 变量。

      Void 指针在 C/C++ 中用于指向未指定的内容。该关键字还用于(以及在 C# 和其他语言中)标记不返回值的方法。所以我想你在想:

      void method();
      

      正在返回 void 类型的东西,但它不是。它没有返回任何东西。

      【讨论】:

        【解决方案4】:

        在C中void不能被认为是一种数据类型,它是一个关键字用作占位符代替数据类型来表明实际上没有数据。

        例如考虑函数void f(void);。这里的关键字void用来表示没有任何参数传递和返回值。

        但是void *ptr;的含义不同。

        这声明了一个指针,但没有指定它指向的数据类型。

        【讨论】:

          【解决方案5】:

          当我们不知道确切的数据类型时,空指针对于内存分配非常有用。尝试编写自己的 malloc 以了解 void *。

          或阅读 http://www.cplusplus.com/reference/cstdlib/malloc/

          【讨论】:

            猜你喜欢
            • 2016-11-23
            • 2013-05-22
            • 1970-01-01
            • 2011-05-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-07
            相关资源
            最近更新 更多