何时在 char 指针上使用 void 指针?

When to use a void pointer over a char pointer?

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

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

void 指针是指向 "any type" 的指针,在取消引用之前需要将其转换为指向实际类型的指针。

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

当意思是 "any type"(或几种类型之一等)时,您应该使用 void *。当您访问 char(显然)或另一种类型的单个字节 作为原始字节 .

时,您应该使用 char *

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

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

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