现在的位置: 首页 > 综合 > 正文

如何通过一个结构体成员变量的地址找到该结构体的首地址?[备忘]

2013年07月25日 ⁄ 综合 ⁄ 共 224字 ⁄ 字号 评论关闭

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);

这样可以绕过字节对齐问题。

抱歉!评论已关闭.