gpt4 book ai didi

c - 这种严格的别名未定义行为如何?

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:13 27 4
gpt4 key购买 nike

<分区>

我知道,我已经看到了,但是我找不到任何好的解释为什么会出现这种未定义的行为:

#include <stdio.h>
#include <stdint.h>

//Common union for both types
union float_int {
float f;
uint32_t i;
};

int main(void) {
union float_int fi;
//This should be problematic
uint32_t* i_ptr = (uint32_t *)&fi.f;

fi.f = 10.0f;
printf("%f : %u\r\n", fi.f, fi.i); //Prints: 10.000000 : 1092616192 which is OK
printf("%u\r\n", *i_ptr); //Prints: 1092616192 which is also OK

return 0;
}

如果我们检查内存表示,两者都是 4 字节 长,因此在指向或类似方面没有内存溢出

这种未定义的行为是怎么回事?

int main() {
union float_int fi;
void* v_ptr = &fi.f;
uint32_t* i_ptr = (uint32_t *)v_ptr;
}

这段代码仍然是未定义的行为吗?我想将 float 数字读取为 unsigned integer 32-bits

为什么使用 memcpy 是唯一可行的方法?

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com