2013-03-01 54 views
2

假设我有这个对变量/结构的偏移是否一样?

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

array a; 
double* a_; 

array b; 
double* b_; 

&a_-&a == &b_-&b,依此类推,每对夫妇阵列/双*?

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

+0

我想声明一个别名的double * x外部结构与结构相同的名称,但后跟一个下划线。 – Fabio 2013-03-01 16:11:59

+0

@userXXX那么你为什么不只是**做到这一点?** – 2013-03-01 16:12:55

+0

编译器可以自由地在它认为合适的地方安排变量,或者甚至在不需要它们的时候完全丢弃它们。 – vonbrand 2013-03-01 16:18:26

回答

4

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

也许如果你可以澄清为什么你想这(你想要做什么?)这将是可能的真正帮助。

+3

XY问题,那是... – 2013-03-01 16:10:27

1

编译器可以自由地在变量之间添加填充字节。一般来说,这将取决于数据的一致性。

1

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

为了保持在一起声明,结合了2元一个struct ...

0

我认为这是编译器的依赖,且局部变量的顺序不是固定的规范。

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