【发布时间】:2016-02-07 21:14:30
【问题描述】:
我是 C 语言的新手,刚刚学习了结构和指针。
我的问题与我最近看到的offsetof 宏有关。我知道它是如何工作的以及其背后的逻辑。
<stddef.h>文件中的定义如下:
#define offsetof(type,member) ((unsigned long) &(((type*)0)->member))
我的问题是,如果我有如下所示的结构:
struct test {
int field1:
int field2:
};
struct test var;
为什么我不能直接得到field2的地址为:
char * p = (char *)&var;
char *addressofField2 = p + sizeof(int);
而不是写这样的东西
field2Offset = offsetof (struct test, field2);
然后将偏移值添加到 var 的起始地址?
有什么不同吗?使用offsetof 效率更高吗?
【问题讨论】:
-
如果您是 C 新手,请放弃
offsetof等。普通编程不需要它,但只有初学者很可能会搞砸的高级功能。 - 没有冒犯,但一个非常善意的警告!