c语言中void除了作为函数的返回值外,一般不单独使用,但是void *有很多用途;
void *的理解:
`void *` 是一个无类型指针,其用处非常广泛。主要有以下用途:
1. 作为函数参数:`void *` 可以作为函数参数,用于传递任意类型的数据,因此可以编写更加通用的函数。例如,`memcpy`函数就使用了 `void *` 类型的指针作为源和目标地址的参数,从而达到复制任意类型数据的目的。
2. 作为函数返回值:`void *` 可以作为函数的返回值,用于指向函数内部动态分配的内存地址。例如,`malloc`函数就是返回一个 `void *` 类型的指针,指向所分配的内存地址。
3. 动态类型转换:使用 `void *` 可以在运行时根据具体数据类型进行动态类型转换。在语言标准库中,就有一些对 `void *` 进行转换的函数,例如 `memset`、`memcpy`、`qsort` 等函数。
4. 在数据结构中的应用:`void *` 可以作为某些数据结构的内部节点指针类型,通过接口函数对节点进行操作。例如链表、树等数据结构类型。
总之,`void *` 的主要作用是提供了一种通用的指针类型,可以在一些数据类型不确定的场合进行处理和转换,从而让程序灵活性更高。
void *的理解实例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a = 50;
char *b = &a;
char **c = &b;
void *d = (void *)c;
printf("*d = %d\n", **(char **)d);
char ***e = &c;
void *f = (void *)e;
printf("*f = %d\n", ***(char ***)f);
char ****g = &e;
void *h = (void *)g;
printf("*h = %d\n", ****(char ****)h);
return 0;
}