void*
是一种特殊的指针类型,可用于存放任意对象的地址。一个void*
指针存放着一个地址,这一点和其他指针类似。
不同的是,我们对该地址中到底是个什么类型的对象并不了解∶
double obj = 3.14, *pd = &obj; // 正确∶ void*
void *pv = &obj; // obj可以是任何类型的对象
pv = pd; // pv 可以存放任意类型的指针
利用void*
能做的事儿比较有限∶ 拿它和别的指针比较、作为函数的输入或输出,或者赋给另外一个 void*
指针。
不能直接操作 void*
指针所指的对象,因为我们并不知道这个对象到底是什么类型,也就无法确定能在这个对象上做哪些操作。
概括说来,以void*
的视角来看内存空间也就仅仅是内存空间,没办法访问内存空间中所存的对象。