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