void*指针可以指向任何类型,可以称为是泛型的指针。
有时候,只能明确应该传入或返回一个指针,但不确定指针指向的类型时,就应该用void*。如果用具体的指针,虽然也是可以实现所要的功能,但会需要一次显式类型转换,这显然更麻烦,而且使程序不清晰。
举个例子:
stdlib.h中的标准库函数memcpy用来复制指定长度的一片存储器区域,它的原型为
void* memcpy(void*, const void*, size_t);
其中第一个参数表示指向目标的指针,第二个参数表示指向源的指针,最后一个参数表示要复制的字节数(size_t同int)。
假设设计时不用void*而用char*,那么当需要传入非char*的指针类型时需要在指针参数前加上(char*)转换,显然会影响编码效率和源码可读性。
|