void指针是一种特殊的指针。例如:void *vp;
且任何类型的指针都可以赋值给void指针,例如:
void* vp;
type* p; // type指任意非void的类型
vp = p; // 无需转换
但是void指针赋值给其他类型的指针时都需要进行转换,例如:
void* vp;
type* p; // type指任意非void的类型
p = (type*)vp;
注意,void指针不能复引用,例如:
void* vp;
*vp // 错误,void指针不能复引用
type* p;// type指任意非void的类型
*p // 正确,普通指针可以复引用
因为void指针只知道所指向的变量(对象)的起始地址,而不知道所指变量(对象)的大小,所以是无法正确引用的。
void指针不能参与指针运算,除非进行强制转换,例如:
void* vp;
int i = 0;
vp = &i;
vp++; // 错误,void指针不能参与指针运算
(int*)vp++;// 正确,已对void指针进行强制转换