本文主要记录在工作过程中遇到的,需要取结构体某个元素的偏移,或者结构体中有个变量的需要申请动态内存的设计技巧,姑且就叫技巧吧,做个记录,由于包含有动态申请的内存,因此,结构体的大小就并不是sizeof的大小了。
typedef struct tagSTRU_KEY_NODE
{
unsigned int Key;
unsigned char first;
unsigned char second;
unsigned char rsr[2];
struct tagSTRU_KEY_NODE *next;
}STRU_KEY_NODE;
typedef struct tagSTRU_KEY_HASH
{
unsigned int itemNum;
unsigned int bucketNum;
unsigned int memLength;
STRU_KEY_NODE *Item;
STRU_KEY_NODE *bucket[1];
}STRU_KEY_HASH;
#define BUCKET_OFFSETOF(_st, _field) ((unsigned int)((signed int)&(((_st *)0x10)->_field) - 0x10))
int main()
{
STRU_KEY_HASH* hashTemp;
BUCKET_OFFSETOF(STRU_KEY_HASH, bucket); //计算bucket的偏移量
memset(hashTemp->bucket, 0, sizeof(STRU_KEY_NODE)* 100);//当bucket节点大小未知的时候可以如上定义数据结构,后续动态申请一块内存(代码中未显示,省略了),然后进行初始化
}