#define offsetof(s,m) (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m))
该宏用于求结构体中一个成员在该结构体中的偏移量。第一个参数是结构体的名字,第二个参数是结构体成员的名字。该宏返回结构体structName s中成员memberName(m)的偏移量。偏移量是size_t类型的。
offsetof returns the offset in bytes of the specified member from the beginning of its parent data structure. It is undefined for bit fields.
示例
#include <stdio.h> #include <stddef.h> typedef struct { int iVal; int iVal2; }Test; typedef struct { char ch; int iNum; }Test2; int main(void) { Test t = {1, 2}; Test2 t2 = {'t', 100}; printf("\naddress of t : %p\naddress of t.iVal : %p\naddress of t.iVal2: %p\n\n", &t, &(t.iVal), &(t.iVal2)); printf("offset of iVal in t: %p\n", offsetof(Test, iVal)); printf("offset of iVal2 in t: %p\n", offsetof(Test, iVal2)); printf("\naddress of t2 : %p\naddress of t2.ch : %p\naddress of t2.iNum: %p\n\n", &t, &(t2.ch), &(t2.iNum)); printf("offset of ch in t2: %p\n", offsetof(Test2, ch)); printf("offset of iNum in t2: %p\n", offsetof(Test2, iNum)); return 0; }
注意内存对齐。
原文
http://www.cppblog.com/lovedday/archive/2007/09/24/32801.html
http://baike.baidu.com/view/5513779.htm