void*指针可以指向任何对象类型,可以称为是泛型的对象指针(尽管void不是对象类型)。
有时候,只能明确应该传入或返回一个指针,但不确定指针指向的类型时,就应该用void*。如果用具体的指针,虽然也是可以实现所要的功能,但会需要一次显式类型转换,这显然更麻烦,而且使程序不清晰。
举个例子:
stdlib.h中的标准库函数memcpy用来复制指定长度的一片存储器区域,它的原型为
void* memcpy(void*, const void*,...
有时候很有用的,比如WIN消息的转发,线程之间参数的传递,数据在内存中的存贮等。打个比方,有一函数为char* ToString( int type, void* data),如果type为1是,data需要指向一个结构体指针,如果type为2时,data需要指向一个类的指针,如果……。如果给你写这么个函数,你该怎么写?当然,还有其他更好的方法。
像开辟空间的malloc函数,他的返回值是一个void型的指针,因为它开辟的内存空间后,指向它说开辟的内存空间的指针指向的类型是多样的... 然后再强制转换成所指向对象的指针...
简单的说,最好用就是把它作为函数形参使用!
void * 以定义一个指针变量,但不说明它指向哪一种类型数据.
1. 传参:通用类型
可以作为函数模板,链表等参数的通用参数。在使用时,只需要强制类型转换就可以。
2.强制类型转换
有时候由于重载等的干扰,导致需要转换成void *,来进行取地址。
例如,(void *)obj.member,就可以取到member的地址;直接&(obj.member)取到的实际上是obj的开始地址。
3.指向0的地址
(void *)0,指向全是0的地址,相当于N...
标签:C语言,void,指针