#include <stdio.h>
#include <string.h>
#define PRINT_SZ(intValue) printf(#intValue" is %zd\n", (intValue));
#define STRUCT_MEMBER_OFFSET(type, member) ((char *)&((type *)0)->member - (char *)0)
/*struct Test {
char a;
short b;
int c;
};*/
struct Test {
char a;
int c;
short b;
};
int main() {
PRINT_SZ(sizeof(struct Test));
PRINT_SZ(STRUCT_MEMBER_OFFSET(struct Test, a));
PRINT_SZ(STRUCT_MEMBER_OFFSET(struct Test, b));
PRINT_SZ(STRUCT_MEMBER_OFFSET(struct Test, c));
return 0;
}


该博客探讨了C语言中结构体的内存布局和成员偏移问题。通过示例展示了如何计算结构体的大小及其成员相对于结构体起始位置的偏移量,揭示了编译器在内存对齐方面的策略。
3158

被折叠的 条评论
为什么被折叠?



