一个工会,我想知道,如果把指针转换为uint32_t的包含一个uint32_t的会导致C中定义的行为联合的指针,即C来自指针投射到uint32_t的一个指向包含uint32_t的
typedef union
{
uint8_t u8[4];
uint32_t u32;
} T32;
void change_value(T32 *t32)
{
t32->u32 = 5678;
}
int main()
{
uint32_t value = 1234;
change_value((T32 *)&value); // value is 5678 afterwards
return EXIT_SUCCESS;
}
这是有效的C吗?提前谢谢了。
你至少试过了吗? – ThibThib
@ThibThib UB很难通过“尝试”来检测。 – 2013-08-20 20:04:08
我试过了,正如评论所述,它完美地工作。但是,我不确定,因为投射指针有时会有些棘手。 – CastingCrows