这是我的代码:
#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指针然后编译它,我没有得到任何错误或警告。我想知道为什么会出现这个错误。
谢谢。
答案 0 :(得分:8)
正如编译器消息所说,void*
不是指向对象类型的指针。这意味着你不能用void*
做任何,除了明确地将它转换回另一个指针类型。 void*
表示一个地址,但它没有指定它所指向的内容的类型,因此您无法对其进行操作。
答案 1 :(得分:0)
编译器需要变量的类型来取消引用指针。
仅示例没有malloc: * int myPtnr = 0x12345;
写作时
* myPtr = NUMBER:
编译器查看类型并说..好吧,我们这里有一个int ...我需要的信息是从指针的地址开始的接下来的4个字节。
这就是你必须告诉编译器类型的原因。当你使用void时,编译器不知道他必须使用多少字节来取消引用。
答案 2 :(得分:0)
你不能解散无效*,这就是编码员正在做的事情。
*x = 23; // this cant be done with void*
代替:
x = &arr[index] ; // this is correct