- 论坛徽章:
- 0
|
本帖最后由 justlooks 于 2012-02-11 14:34 编辑
如下代码看不明白
- ((type *)((char *)(ptr) - offsetof(type, member)))
复制代码 offsetof调用是个宏,求出结构体type中member成员变量的偏移量
- define offsetof(type, member) ((size_t) &((type *)0)->member)
复制代码 终于弄明白了,结构体在内存中并不是挨一起放的,象char占1个字节,那么实际存放也是占4字节,如下结构
struct test {
char mych;
int myint;
}
那么内存放置为
(gdb) p &test->myint
$3 = (unsigned int *) 0x804a00c
(gdb) p &test->mych
$4 = 0x804a008 "A"
也就是前面的offsetof宏求出的是在结构体中 myint之前所有成员变量的偏移量,那么当指向myint的ptr再减去 这个偏移量就得到整个结构体的开始位置。
这个在不知道结构体在myint成员变量前具体有多少成员变量情况下就可以求得结构体位置指针 |
|