同一数据类型的结构和数组之间有什么区别?

时间:2017-03-07 18:38:22

标签: c arrays pointers struct padding

如果我的结构只包含短无符号整数,那么它将存储在相同大小的连续内存位置;如果我有一个短无符号整数数组,也同样适用。他们怎么会有所不同?它们是如何被访问的?我知道通过使用指针引用数组来访问数组,而数组操作符设置从该内存位置的偏移量,同样适用于结构或通过使用每个部分的内存位置访问的结构数据?

1 个答案:

答案 0 :(得分:2)

不,他们不必相同,最不可能,他们不是。

在结构成员的情况下,成员之间可以有填充。因此,不能保证连续成员将驻留在连续的内存中。在这种情况下,基于实现,使用第一元素的地址的指针算法可以或可以不是 work 有效。

引用C11标准的相关部分,章节§6.7.2.1/ p15,结构和联合说明符,

  

[..]可能有未命名的   在结构对象中填充,但不在其开头。

章节§6.5.3.4,sizeof运算符,

  

[...]什么时候   应用于具有结构或联合类型的操作数,结果是总数   这样一个对象中的字节,包括内部和尾部填充。

但是,对于数组,所有成员都保证驻留在连续的内存中,指针算法是确定的。