http://c-faq.com/strangeprob/ptralign.html
在 16.7 中,作者解释说:
s.i32 = *(long int *)p;
s.i16 = *(int *)p;
会遇到麻烦,因为这些强制转换的指针可能没有对齐。所以他改用字节操作来解决问题。
我的问题是,因为这段代码:
struct mystruct {
char c;
long int i32;
int i16;
} s;
在'char c;'之后会有填充字节,为什么作者在尝试获取'long int i32;'时没有跳过填充?