offsetof

时间:2019-07-01 09:25:33

标签: c

我在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----

0 个答案:

没有答案