提供结构测试:
#include <stdio.h>
int main() {
struct {
char* one;
char* two;
char* three;
} test;
char **ptr = &test.one;
*ptr = "one";
*++ptr = "two";
*++ptr = "three";
printf ("%s\n", test.one);
printf ("%s\n", test.two);
printf ("%s\n", test.three);
}
问题:是否可以保证 test
结构中的元素始终处于连续的内存顺序? (因此从第一个结构元素 ++ptr
开始将始终指向 test
结构中的下一个元素?)
最佳答案
对于指针,您肯定会始终观察到这种行为,但 C 语言所做的唯一保证是元素在内存中是有序的。之间可能存在间隙以优化字段的对齐(为了性能,特别是在 RISC 架构上)。
正确的方法是使用 offsetof 宏,或者将其设为数组。
关于C 结构体指针从第一个元素到最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28929519/