void 指针是一种特殊的指针,表示为“无类型指针”,在 ANSI C 中使用它来代替“char*”作为通用指针的类型。由于 void 指针没有特定的类型,因此它可以指向任何类型的数据。也就是说,任何类型的指针都可以直接赋值给 void 指针,而无需进行其他相关的强制类型转换,如下面的示例代码所示:
- void *p1;
- int *p2;
- …
- p1 = p2;
虽然如此,但这并不意味着可以无需任何强制类型转换就将 void 指针直接赋给其他类型的指针,因为“空类型”可以包容“有类型”,而“有类型”则不能包容“空类型”。正如我们可以说“男人和女人都是人”,但不能说“人是男人”或者“人是女人”一样。因此,下面的示例代码将编译出错,如果在 V
C++2010 中,将提示“a value of type"void*"cannot be assigned to an entity of type"int*"”的错误信息。
- void *p1;
- int *p2;
- …
- p2 = p1;
由此可见,要将 void 指针赋值给其他类型的指针,必须进行强制类型转换。如下面的示例代码所示:
- void *p1;
- int *p2;
- …
- p2 = (int*)p1;