Linux内核代码里的一个宏(Linux内核里很多结构体之间是通过某一成员变量相互寻址的),感觉挺巧妙。大概意思是:
#define get_addr(type, member, mem_addr) (type*)(mem_addr - &(((type*)0)->member))
typedef struct{
int a;
int b;
int c;
}test_t test;
addr = get_addr(test_t, c, &test.c);
这样可以绕过字节对齐问题。