C ++类型转换*(float *)&

0 c++

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

struct vector
{
   float value;
};

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

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 5

&(v3)
Run Code Online (Sandbox Code Playgroud)

该地址v3的类型为vector*

(float*)&(v3)
Run Code Online (Sandbox Code Playgroud)

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

*(float*)&(v3)
Run Code Online (Sandbox Code Playgroud)

最后,我们读取其中的内容float*i使用值进行初始化。

这里涵盖了这个相当复杂的过程的有效性:通过C强制转换访问结构的第一个字段是否违反严格的别名?但是,总而言之,对于问题中描述的特定情况,使用POD结构,标准表示强制转换有效。

写会更有意义

float i = v3.value;
Run Code Online (Sandbox Code Playgroud)