我是 C 语言的新手,刚刚了解了结构和指针。
我的问题与offsetof
我最近看到的宏有关。我知道它是如何工作的以及其背后的逻辑。
在<stddef.h>
文件中定义如下:
#define offsetof(type,member) ((unsigned long) &(((type*)0)->member))
我的问题是,如果我有如下所示的结构:
struct test {
int field1:
int field2:
};
struct test var;
为什么我不能直接获取field2
as的地址:
char * p = (char *)&var;
char *addressofField2 = p + sizeof(int);
而不是写这样的东西
field2Offset = offsetof (struct test, field2);
然后将偏移值添加到 var 的起始地址?
有什么区别吗?使用offsetof
效率更高吗?