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;
就可以了。