【发布时间】:2021-11-17 01:51:37
【问题描述】:
这会产生一个总线错误:
union { char a[10];
int i;
} u;
int *p = (int *) &u.a[1]);
*p = 17;
为什么会产生错误?我的意思是,chars 可以容纳数字 17。
【问题讨论】:
-
第 4 行末尾还有额外的
)。你到底想做什么? -
什么是
chars?这不在您的代码中。 -
"chars 可以容纳数字 17",这是真的,但是只要假定该值的类型为
int,编译器就会将所有四个字节写入那里(因此,假设int为 4 个字节,0x00000011.) -
@RobertHarvey 您需要在有对齐限制的处理器上运行。 x86 处理器可以让您摆脱 C 标准无法保证的事情。