一对变量/结构的偏移量是否相同?

时间:2013-03-01 16:07:55

标签: c pointers struct

假设我有这个

typedef struct{
  int n;
  double* x;
}array;

array a;
double* a_;

array b;
double* b_;

&a_-&a == &b_-&b,依此类推每一对数组/双*?

在否定的情况下,如何才能确保这一点?

4 个答案:

答案 0 :(得分:4)

您不能依赖具有任何特定关系的单独变量的地址。此外,您无法有效地将地址减去不同的变量。

也许如果你能澄清为什么你想要这个(你想做什么?),那么实际上可以提供帮助。

答案 1 :(得分:1)

编译器可以在变量之间添加填充字节。通常,它取决于数据的对齐方式。

答案 2 :(得分:1)

不,有些编译器会将“小”变量放在不同位置的大型结构\数组中。

保持一起声明一个结合了2个元素的结构...

答案 3 :(得分:0)

我认为它依赖于编译器,并且规范中没有修复局部变量的顺序。

您可以尝试创建一个用#pragma pack包装这些成员的结构,以避免编译器最终添加任何填充字节。