我有这个密码:
typedef union MyUnion {
int ival;
float fval;
} MyUnion;
MyUnion myUnion;
myUnion.fval = 3.0f;
someFuncCall(myUnion.ival);
当我要求静脉注射时,我到底在做什么?我想我是在要求考虑浮点数(编码为?)我还假设这与共享内存中的相同空间有关?不过,我绝对不确定。这是我在向Vivado套件中的FPGA发送浮点数据时必须使用的技巧。所有数据都应以整数形式输入。我真的非常感谢您对正在发生的事情或仅仅是指向资源的指针做任何彻底的澄清。谢谢!
最佳答案
根据标准IEC9899/2011第6.5.2.3条,注95:
如果用于读取联合对象内容的成员与上次用于在对象中存储值的成员不同,则该值的对象表示的适当部分将重新解释为6.2.6中所述的新类型的对象表示(有时称为“type punning”)。这可能是一个陷阱表示。
因此,确实,您正在尝试做的工作,但它可能会导致问题(例如,不同大小的成员或不同的内存对齐方式)。
关于c - 访问 union 中其他类型的未分配值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25710362/