为什么void*在C中有效?

为什么void*在C中有效?,c,void,void-pointers,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 ge

为什么我们可以将变量标记为“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.

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

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


这是一个实现快速排序的通用函数。本例中的比较函数使用void*指针来表示它可以比较任何数据类型

这必须在C++中有效:避免*p;