prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 2.14

我如何确定结构中某个字段的字节偏移量?


ANSI C 在offsetof()宏定义于<stddef.h>中,它允许你计算结构s中字段f的偏移量:offsetof(struct s, f)。如果出于某种原因你必须自己编写这类代码,一种可能的方式是:

	#define offsetof(type, f) ((size_t) \
		((char *)&((type *)0)->f - (char *)(type *)0))

此实现并非 100% 可移植;某些编译器可能会合法地拒绝接受它。

(上述定义的复杂性需要稍作解释。减去一个经过仔细转换的空指针,即使空指针的内部表示不是 0,也应该能保证计算出一个简单的偏移量。这些强制类型转换是为了(void *)确保计算出的偏移量是字节偏移量。不可移植性在于,即使只是为了地址计算的目的,也假设有一个类型的实例位于地址 0。但请注意,由于这个假设的实例实际上并未被引用,因此不太可能发生访问违例。)

参考:ISO Sec. 7.1.6
Rationale Sec. 3.5.4.2
H&S Sec. 11.1 pp. 292-3


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管