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
是用来表示长度的数据类型