我在c中尝试了一些offsetof测试。 结果很奇怪。
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER)
struct MY_DATA {
int da, db, dc;
struct MY_DATA *next;
};
int main() {
puts("----offset----");
printf("----next = %lu----\n", offsetof(struct MY_DATA, next));
printf("----data_a = %lu----\n", offsetof(struct MY_DATA, da));
printf("----data_b = %lu----\n", offsetof(struct MY_DATA, db));
printf("----data_c = %lu----\n", offsetof(struct MY_DATA, dc));
return 0;
}
我希望下一个是12,但实际是16。 有什么问题吗?
----offset----
----next = 16----
----data_a = 0----
----data_b = 4----
----data_c = 8----