鉴于void是一个空类型,为什么void *指针类型可以指向任何类型的对象?

时间:2017-08-23 18:24:46

标签: c

在C中,void是没有任何值的类型,即空类型。

遵循void的含义,void*应该是指向任何内容的指针,相反,void*实际上是指针类型,可以指向任何类型的对象。

我在这里误解了什么吗?

2 个答案:

答案 0 :(得分:2)

您可以将void *视为“指向我们不知道其类型的内容的指针”,而不是“指向任何类型的对象的指针”。它基本上是一个指针,没有与之关联的任何类型信息,而void可以表示缺少类型。

答案 1 :(得分:1)

编译器不需要有关类型的所有信息以便为彼此分配指针,也不需要任何信息来定义结构成员或将这样的指针作为参数传递给函数,原因很可能清楚,所有指针都有相同的大小。

当程序试图读取或写入底层数据时 - 指针实际指向的数据,然后它需要所有类型的信息才能执行指针算法。因此,它基本上需要知道指针所指向的结构的成员的偏移量,或者当您需要取消引用它时,究竟在哪里ptr[3]。它需要计算此类偏移所需的信息。

由于编译器实际上并不需要上述操作的指针类型,因此指针可以没有类型,因此void *是此类指针的“ type ”。但请注意,在您可以使用它之前,您需要一个实际的类型。