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 = NUMBER:
编译器查看类型并说.. 好的,这里我们有一个 int ... 我需要的信息在接下来的 4 个字节中,从指针的地址开始。
这就是为什么你必须告诉编译器类型的原因。当您使用 void 时,编译器不知道他必须使用多少字节来取消引用。
您不能取消对 void* 的引用,这就是代码所做的。
*x = 23; // this cant be done with void*
改为:
x = &arr[index] ; // this is correct
这是我的代码:
#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 = NUMBER:
编译器查看类型并说.. 好的,这里我们有一个 int ... 我需要的信息在接下来的 4 个字节中,从指针的地址开始。
这就是为什么你必须告诉编译器类型的原因。当您使用 void 时,编译器不知道他必须使用多少字节来取消引用。
您不能取消对 void* 的引用,这就是代码所做的。
*x = 23; // this cant be done with void*
改为:
x = &arr[index] ; // this is correct