我听说在 C 语言中,包含在结构中的数组可能在数组元素之间添加了填充。现在很明显,任何一对元素之间的填充量不能改变,或者使用简单的指针算法计算数组中的下一个元素是不可能的。
该谣言还指出,未包含在结构中的数组保证不包含填充。我知道至少那部分是真的。
因此,在代码中,谣言是:
{
// Given this:
struct { int values[20]; } foo;
int values[20];
// This may be true:
sizeof(values) != sizeof(foo.values);
}
我很确定那sizeof(values)
将永远相等sizeof(foo.values)
。但是,我无法在 C 标准(特别是 C99)中找到任何明确确认或否认这一点的内容。
有谁知道这个谣言是否在任何 C 标准中得到解决?
编辑foo.values
:我知道在数组的结尾和结构的结尾之间可能有填充,并且标准规定在开头和开头foo
之间不会有填充。但是,是否有人引用或引用了标准,其中说 的元素之间没有填充?foo
foo.values
foo.values