void指针是通用指针,用来存放任何数据类型的引用。下面的例子就是一个void指针:
void *pv;
它有两个有趣的性质:
void指针具有与char指针相同的形式和内存对齐方式;void指针和别的指针永远不会相等,不过,两个赋值为NULL的void指针是相等的。
任何指针都可以被赋给void指针,它可以被转换回原来的指针类型,这样的话指针的值和原指针的值是相等的。在下面的代码中,int指针被赋给void指针然后又被赋给int指针:
int num;
int *pi = #
printf("Value of pi: %p\n", pi);
void* pv = pi;
pi = (int*) pv;
printf("Value of pi: %p\n", pi);
运行这段代码后,指针地址是一样的:
Value of pi: 100
Value of pi: 100
void指针只用做数据指针,而不能用做函数指针。在8.4.2节中,我们将再次研究如何用void指针来解决多态的问题。
用
void指针的时候要小心。如果把任意指针转换为void指针,那就没有什么能阻止你再把它转换成不同的指针类型了。
sizeof操作符可以用在void指针上,不过我们无法把这个操作符用在void上,如下所示:
size_t size = sizeof(void*); // 合法
size_t size = sizeof(void); // 不合法
size_t是用来表示长度的数据类型
极客教程