繁体   English   中英

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

[英]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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM