In C++, I'm getting a message "error: 'void*' is not a pointer-to-object type"

In C++, I'm getting a message "error: 'void*' is not a pointer-to-object type"

这是我的代码:

#include <iostream>
using namespace std;

int main()
{
   void *x;
   int arr[10];
   x = arr;
   *x = 23; //This is where I get the error
}

如您所见,代码非常简单。它只是创建一个空指针 x,它指向数组 'arr' 的内存地址,并将整数 23 放入该内存地址。但是当我编译它时,我收到错误消息“'void*' 不是指向对象的指针类型”。当我使用 'int' 指针而不是 void 指针然后编译它时,我没有收到任何错误或警告。我想知道为什么会出现此错误。

谢谢。

正如编译器消息所说,void* 不是指向对象类型的指针。这意味着你不能用void*任何事情,除了显式地将它转换回另一种指针类型。 void*表示一个地址,但它没有指定它所指向的事物的类型,因此你无法对其进行操作。

编译器需要变量的类型来取消引用指针。

仅示例无 malloc: *int myPtnr = 0x12345;

写的时候

*myPtr = NUM​​BER:

编译器查看类型并说.. 好的,这里我们有一个 int ... 我需要的信息在接下来的 4 个字节中,从指针的地址开始。

这就是为什么你必须告诉编译器类型的原因。当您使用 void 时,编译器不知道他必须使用多少字节来取消引用。

您不能取消对 void* 的引用,这就是代码所做的。

*x = 23; // this cant be done with void*

改为:

x = &arr[index] ; // this is correct