为什么void *在C语言中有效?

时间:2018-06-28 02:47:22

标签: c void void-pointers

为什么我们可以将变量标为“ void * x”而不是“ void x”? 为什么“ void * x”有用?

示例:

int main()
{
    void* a;
    return 0;
}

上面的代码成功编译并运行

int main()
{
    void a;
    return 0;
}

上面的代码得到以下编译错误:

b.c:6:10: error: variable has incomplete type 'void'
    void a;
         ^
1 error generated.

1 个答案:

答案 0 :(得分:1)

我认为这是因为void通常用作函数的返回类型,以指示没有返回值。

无效*实际上非常有用! Void *用作malloc()和calloc()等内存函数的返回类型,因为它允许它们处理任何数据类型。此外,void *可用于创建通用函数。一个经常被引用的例子是:     void qsort (void* base, size_t num, size_t size, int (*comparator)(const void*,const void*))

这是实现快速排序的通用功能。在这种情况下,比较函数使用void *指针来建议它可以比较任何数据类型。