在C ++中,我收到一条消息“错误:'void *'不是指向对象的指针类型”

时间:2015-02-11 17:18:56

标签: c++ compiler-errors codeblocks memory-address void-pointers

这是我的代码:

#include <iostream>
using namespace std;

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

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

谢谢。

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:0)

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

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

写作时

* myPtr = NUM​​BER:

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

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

答案 2 :(得分:0)

你不能解散无效*,这就是编码员正在做的事情。

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

代替:

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