最近我发现了以下片段,它试图确保i
的所有字节(而不是更多)都可以作为c
的单个元素访问:
union {
int i;
char c[sizeof(int)];
};
现在这似乎是一个好主意,但我想知道标准是否允许
char
的对齐要求比 int
更严格的情况。换句话说,是否可能有一个需要在四字节边界上对齐的四字节 int 和一个需要在十六字节边界上对齐的一字节
char
(按定义是一字节,见下文)?这会影响上面的联合使用吗?
需要注意两点:
1. 我在这里特别讨论标准允许什么,而不是理智的实现者/架构提供什么。 2. 我在使用 "byte" 一词时是指 ISO C 中的意义,即它是一个
char
的宽度,不一定是 8 位。
a[i]
和a+i
,会导致数组的哪个特定功能无法正常工作? - paxdiablo(void *) a + i * sizeof(*a)
- Bill Lynchvoid *
上进行指针算术运算是不允许的。 - Chris Lutz