关于c/c+中struct的地址布局+;

关于c/c+中struct的地址布局+;,c,struct,C,Struct,第一个元素的地址总是比最后一个元素的地址低,不管它是在堆栈中还是在堆中,这是真的吗?是的,您可以假设给定类的对象在内存中的布局都是相同的,不管它们存储在哪里 请注意,上述内容并不意味着任何关于哪一端存储在较低地址的信息。编译器可以根据自己的需要对类的字段进行重新排序。嗯,是的。struct的元素位于内存中,其顺序与struct定义中定义的顺序相同。它们之间可能有填充(但保证在第一个元素之前没有填充,指向struct的指针可以安全地转换为指向该struct的第一个元素的指针),但它们在内存中的排列

第一个元素的地址总是比最后一个元素的地址低,不管它是在堆栈中还是在堆中,这是真的吗?

是的,您可以假设给定类的对象在内存中的布局都是相同的,不管它们存储在哪里


请注意,上述内容并不意味着任何关于哪一端存储在较低地址的信息。编译器可以根据自己的需要对类的字段进行重新排序。

嗯,是的。
struct
的元素位于内存中,其顺序与
struct
定义中定义的顺序相同。它们之间可能有填充(但保证在第一个元素之前没有填充,指向
struct
的指针可以安全地转换为指向该
struct
的第一个元素的指针),但它们在内存中的排列顺序始终相同


我们可以问一下你为什么要问吗?

我认为编译器不能对
结构的字段重新排序,但我正在做作业,所以我不打算检查标准。好的,我明白了。编译器的自由度远远低于我所暗示的。你的意思是
struct
的第一个元素在较小和较大的endian上有所不同吗?@compile fan:不,结构布局与endianness无关。可能是重复的,但我正在读的书说它取决于endianness,因此,第一个元素是否位于较低的地址并不总是正确的。@compile fan-Endianness应该会影响整数中字节的顺序,但我不相信标准中说的那样会影响不同变量之间的相对顺序。它可能会影响位字段元素的顺序,但它们没有地址,严格来说,他们没有“记忆顺序”。