利用空指针,返回结构成员在结构中的偏移量
一:代码如下






























二:将该功能封装为宏
#include<stdio.h>
//将指针转化为无符号短整型
#define P_TO_UINT16(p) ((unsigned short)(unsigned int)(p))
//返回结构成员在结构中的偏移量:适合于非数组成员
#undef SSZ
#define SSZ(name, field) P_TO_UINT16(&(((name *)0)->field))
//返回结构成员数组0号元组在结构中的偏移量:适合于数组成员,如j[5]
#undef SSZA
#define SSZA(name, field) P_TO_UINT16(&(((name *)0)->field[0]))

typedef struct _bkeydata ...{

unsigned short len; /**//* 00-01: Key/data item length. */

unsigned char type; /**//* 02: Page type AND DELETE FLAG. */

unsigned char data[1]; /**//* Variable length key/data item. */
int i;
int j[5];
} BKEYDATA;
int
main(void)

...{
unsigned short int ioffset,joffset;
//返回i在结构中的offset
ioffset = SSZ(BKEYDATA, i);
printf("ioffset = %d ", ioffset);
//返回j[]的0号元组在结构中的offset
joffset = SSZA(BKEYDATA, j);
printf("joffset = %d ", joffset);
return 0;
}











































