我有以下代码:
#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;
}
打印-1.61669。为什么?它应该打印-5.0。
答案 0 :(得分:5)
这是因为&_t200
是_t200
的地址。由于_t200
是void*
,因此其地址为void **
。
我认为你打算这样做
_t300 = *(float*)_t200;
顺便说一下,保留以_
开头的符号;你不应该这样命名变量。
答案 1 :(得分:1)
答案 2 :(得分:1)
您的错误在这里:
_t300 = *(float *)&_t200;
您正在使用_t200
的地址,将其设为void**
,因此当您打印时,您实际上打印的地址为t_200
答案 3 :(得分:1)
在您的代码中,您没有投放void*
- 您正在投射&_t200
,这是void**
。如果省略&
,就会得到想要的结果。
答案 4 :(得分:1)
这种表现
*(float *) &_t200;
将指针_t200
占用的内存重新解释为float
对象,并计算该float
值。即您看到的-1.61669
指针_t200
本身(即地址)的内容被重新解释为float
。
这可能不是你想要做的。
如果您想要访问存储在-5.0
中的原始_t100
值,则必须重新解释内存_t200
指向,而不是记忆_t200
占据了自己。以下表达式
*(float *) _t200;
会做到这一点。