如果我的结构只包含短无符号整数,那么它将存储在相同大小的连续内存位置;如果我有一个短无符号整数数组,也同样适用。他们怎么会有所不同?它们是如何被访问的?我知道通过使用指针引用数组来访问数组,而数组操作符设置从该内存位置的偏移量,同样适用于结构或通过使用每个部分的内存位置访问的结构数据?
答案 0 :(得分:2)
不,他们不必相同,最不可能,他们不是。
在结构成员的情况下,成员之间可以有填充。因此,不能保证连续成员将驻留在连续的内存中。在这种情况下,基于实现,使用第一元素的地址的指针算法可以或可以不是 work 有效。
引用C11
标准的相关部分,章节§6.7.2.1/ p15,结构和联合说明符,
[..]可能有未命名的 在结构对象中填充,但不在其开头。
和
章节§6.5.3.4,sizeof
运算符,
[...]什么时候 应用于具有结构或联合类型的操作数,结果是总数 这样一个对象中的字节,包括内部和尾部填充。
但是,对于数组,所有成员都保证驻留在连续的内存中,指针算法是确定的。