本文主要记录在工作过程中遇到的,需要取结构体某个元素的偏移,或者结构体中有个变量的需要申请动态内存的设计技巧,姑且就叫技巧吧,做个记录,由于包含有动态申请的内存,因此,结构体的大小就并不是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节点大小未知的时候可以如上定义数据结构,后续动态申请一块内存(代码中未显示,省略了),然后进行初始化 }