何时在 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
函数。
所以它不是关于它是否工作或编译的全部,它也应该是可读的,
在哪种情况下我们应该更喜欢 void 指针而不是 char 指针,反之亦然?
事实上,两者都可以类型转换为任何数据类型。
void
指针是指向 "any type" 的指针,在取消引用之前需要将其转换为指向实际类型的指针。
指向 char
的指针是指向 char
的指针,它恰好具有 属性,您也可以通过它访问(部分)其他类型。
当意思是 "any type"(或几种类型之一等)时,您应该使用 void *
。当您访问 char
(显然)或另一种类型的单个字节 作为原始字节 .
char *
当指针指向的变量类型未知时,使用空指针。例如 malloc() 函数 returns 一个指向已分配内存的空指针。然后您可以将指针转换为其他数据类型。
在某些情况下,您可能需要创建一个指针来仅存储地址。您可以在那里使用空指针。
它更多的是关于代码的可读性和结构,我不想看到一个函数需要输入让我们说指向结构的指针并通过 char* 获取它,如果我看到 char* 是一个字符串,我首先想到的是(在纯 c 术语中,字符数组,null 终止),另一方面,对于 void* 我被警告说将要传递一些一般性的东西,一个很好的例子是 qsort
函数。
所以它不是关于它是否工作或编译的全部,它也应该是可读的,