C++ 如何在C+;中键入void*指针+;?

C++ 如何在C+;中键入void*指针+;?,c++,casting,C++,Casting,我有以下代码: #include <iostream> using namespace std; int main() { // your code goes here float _t100; void * _t200; float _t300; _t100 = -5.0; _t200 = &_t100; _t300 = *(float *)&_t200; cout<<_t300;

我有以下代码:

#include <iostream>
using namespace std;

int main() {
    // your code goes here
    float _t100;
    void * _t200;
    float _t300;
    _t100 = -5.0;
    _t200 = &_t100;
    _t300 = *(float *)&_t200;
    cout<<_t300;
    return 0;
}
#包括
使用名称空间std;
int main(){
//你的密码在这里
浮球t100;
无效*_t200;
浮球t300;
_t100=-5.0;
_t200=&U t100;
_t300=*(浮动*)和_t200;

您的代码中是否有一个额外的
&
:这一行

_t300 = *(float *)&_t200;
不需要符号,因为
\u t200
已经是指针:

_t300 = *(float *)_t200;
.

您的错误如下:

\u t300=*(浮动*)&u t200;


您正在获取
\u t200
的地址,使其成为
无效**
,因此,当您打印它时,您实际上是在打印
t\u 200
的地址,这是因为
\u t200
的地址。因为
\u t200
无效*
,所以它的地址是
无效**/code>

我想你是有意的

_t300 = *(float*)_t200;

顺便说一下,以
开头的符号是保留的;您不应该这样命名变量。

在您的代码中,您没有铸造
无效*
-您铸造的是
,这是一个
无效**
。如果您省略
,您会得到想要的结果。

这个表达式

*(float *) &_t200;
将指针
\u t200
占用的内存重新解释为
float
对象,并计算为
float
值。即,您看到的
-1.61669
是指针
\u t200
本身(即地址)的内容,重新解释为
float

这可能不是你想做的

如果要访问存储在
\u t100
中的原始
-5.0
值,必须重新解释
\u t200
所指向的内存,而不是
\u t200
占用的内存

*(float *) _t200;

就是这样。

\u t200
绝对不是一个
浮点
,假装它不会带来任何好处。@Deduplicator你能详细说明一下吗?当你知道它实际上指向一个浮点时,我看不出将
void*
类型转换为
浮点*
有什么错。&u t200=&u t100;这句话的意思是什么s表示:_t200包含对_t100地址的引用,因此如果您更改_t100,您也在更改_t200,因为它们都指向相同的地址和值。但是&_t200是对未知变量void*_t200地址的引用。您的意思是写入,其中*_t200指针指向。仅在全局scop中e、 或者,如果第二个字符是大写的,那么:
union{void*p;float x;};*(float*)&p=.1f;
就可以了。