C ++ Typecasting *(float *)&

时间:2014-07-18 08:57:21

标签: c++

请向我解释包含变量i初始化的行

struct vector
{
   float value;
};

int main()
{
    vector v3;
    v3.value = 5.0f;

    float i = *(float*)&(v3);

    return 0;
}

2 个答案:

答案 0 :(得分:5)

&(v3)

这会使v3的地址为vector*

(float*)&(v3)

现在我们将该地址转换为float*类型。

*(float*)&(v3)

最后,我们阅读了float*的内容并使用该值初始化i

此处涉及这个相当复杂的过程的有效性:Does accessing the first field of a struct via a C cast violate strict aliasing?总而言之,对于问题中描述的特定场景,使用POD结构,标准表明转换是有效的。

会更有意义
float i = v3.value;

答案 1 :(得分:0)

就像这样(我认为:)):

  1. 你拿了v3,并要求它的地址(& operator)
  2. 然后将其投入(浮动*)
  3. 最后,你要求它的内容(*运营商),并将其分配给我
  4. 看起来对吗?