如何找到container_of返回的地址?

时间:2016-02-06 02:49:04

标签: c struct

我不打算实现这个功能,但我想知道如何从概念上考虑它。例如,struct包含5个整数。 sizeof()的每个整数的大小为4.如果第5个元素的地址是0x8b1000d,我如何找到结构的地址?我已经读过struct的地址是第一个元素的地址。那么我只是从第5个地址中减去每个整数的大小才能找到它?

1 个答案:

答案 0 :(得分:0)

最好使用offsetof宏(#include <stddef.h>)来获取相关字段的字节偏移量,并从字段地址中减去该值以获取结构开头的地址。

给定结构中字段的地址,您所要做的就是从字段地址中减去该字段的偏移量(由offsetof生成),并为您提供结构的地址。有一些演员参与,但基本上就是这样。这是一个例子:

struct blah {
    int a, b, c, d, e;
} xyz;

int *my_blah_e = &xyz.e;
struct blah *my_blah = (struct blah *) (((char *) my_blah_e) - offsetof(blah, e));
// my_blah == &xyz