C中的void指针

void指针是通用指针,用来存放任何数据类型的引用。下面的例子就是一个void指针:

void *pv;

它有两个有趣的性质:

  • void指针具有与char指针相同的形式和内存对齐方式;
  • void指针和别的指针永远不会相等,不过,两个赋值为NULLvoid指针是相等的。

任何指针都可以被赋给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是用来表示长度的数据类型

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程