void * 相当于通用的指针类型,可以存放指向任何类型的指针,当你的函数参数类型不确定时,可以使用 void *。
但使用 void 定义一个变量,如:void a; // 编译会报错
【例1】
void *p1;
int *p2;
p1 = p2; // 正确,因为 void * 可以指向任何类型的指针,无需进行强制类型转换
【例2】
void *p1;
int *p2;
p2 = p1; // 错误,“无类型” 可包容 “有类型”,但 “有类型” 不能包容 “无类型”
注意:按照 ANSI (American National Standards Institute) 标准,不能对 void * 进行算法操作,如:
void * pvoid;
pvoid++; // ANSI:错误
pvoid += 1; // ANSI:错误,ANSI 坚持进行算法操作的指针必须是确定知道其指向数据类型大小
实际的程序设计中,为迎合 ANSI 标准,并提高程序的可移植性,我们可以这样处理:
void* pvoid;
(char *) pvoid++;