C++;结构内存分配 在C++中,如果我定义了这样的结构 struct ComplexFloat { float r; float i; }; struct ComplexFloat cf; float *f=(float*)cf;

C++;结构内存分配 在C++中,如果我定义了这样的结构 struct ComplexFloat { float r; float i; }; struct ComplexFloat cf; float *f=(float*)cf;,c++,memory,struct,C++,Memory,Struct,我声明了两个这样的变量 struct ComplexFloat { float r; float i; }; struct ComplexFloat cf; float *f=(float*)cf; 我可以安全地假设以下条件始终为真吗 (&(cf.r)==&(f[0]) && &(cf.i)==&(f[1])) ? 换句话说,我可以安全地假设,在一个包含浮点数的结构中,它的元素将占据内存中连续的位置,并且将按照它们在结构定义中出现的顺

我声明了两个这样的变量

struct ComplexFloat {
  float r;
  float i;
};
struct ComplexFloat cf;
float *f=(float*)cf;
我可以安全地假设以下条件始终为真吗

(&(cf.r)==&(f[0]) && &(cf.i)==&(f[1]))
?

换句话说,我可以安全地假设,在一个包含浮点数的结构中,它的元素将占据内存中连续的位置,并且将按照它们在结构定义中出现的顺序进行排序吗


我在Ubuntu上测试了gcc 4.8.2,我只是想确保它始终有效。

不,除非你控制结构中的数据对齐,否则你不能认为我会在正确的位置。r和i之间可能存在对齐填充,该表达式甚至无法编译,
cf
不是数组或指针。如果这是出于学术好奇心,也可以,但如果是为了生产代码,您可能需要重新考虑您的设计。谢谢@JoachimPileborg,我也更正了这个问题,这将违反规则。但它们的顺序必须相同