将非整体类型铸造到结构上 请考虑以下代码片段: typedef struct { float x; } str_t; unsigned char data[4] = {0xFF,0xFF,0xFF,0xFF}; str_t st = *(str_t*)data;

将非整体类型铸造到结构上 请考虑以下代码片段: typedef struct { float x; } str_t; unsigned char data[4] = {0xFF,0xFF,0xFF,0xFF}; str_t st = *(str_t*)data;,c,pointers,casting,structure,C,Pointers,Casting,Structure,stru t.x中的值等于NaN。 你们谁能解释一下,为什么这样的铸造被认为是未定义的 假设: 浮点的长度等于4字节 编辑: 正如所指出的,NaN不是一个“C”定义的东西,结果是在GCC+GDB下得到的。stru.x的精确结果是相等的(根据EclipseGDP插件)-nan(0x7fffff)如果你真的想弄乱float的字节表示,请阅读IEEE 754,它被认为是未定义的,因为无符号字符[4]与str\t不同。非常简单的解释…由于C实现甚至不需要支持NaN,如何定义此代码?充其量,它可以是实现定

stru t.x
中的值等于
NaN
。 你们谁能解释一下,为什么这样的铸造被认为是未定义的

假设: 浮点的长度等于4字节

编辑:
正如所指出的,NaN不是一个“C”定义的东西,结果是在GCC+GDB下得到的。
stru.x
的精确结果是相等的(根据EclipseGDP插件)
-nan(0x7fffff)

如果你真的想弄乱
float
的字节表示,请阅读IEEE 754,它被认为是未定义的,因为
无符号字符[4]
str\t
不同。非常简单的解释…由于C实现甚至不需要支持
NaN
,如何定义此代码?充其量,它可以是实现定义的行为。C没有为
NaN
定义位模式,因此“stru t.x中的值等于NaN”可能是您的经验,但不是C定义的行为。如果您真的想处理
float
的字节表示,请阅读IEEE 754,它被认为是未定义的,因为
无符号字符[4]
stru t
不同。非常简单的解释…由于C实现甚至不需要支持
NaN
,如何定义此代码?充其量,它可以是实现定义的行为。C没有为
NaN
定义位模式,因此“stru_.x中的值等于NaN”可能是您的经验,但不是C定义的行为。