c语言复习-----结构体的地址计算(宏)
2013-11-19 16:19
183 查看
linux下开发经常会碰到这2个宏,总结下:
宏功能:获得一个结构体变量成员在此结构体中的偏移量
1. ( (TYPE *)0 ) 将零转型为TYPE类型指针;
2. ((TYPE *)0)->MEMBER 访问结构中的数据成员;
3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址,即相对于0的偏移量,要的就这个;
4.(size_t)(&(((TYPE*)0)->MEMBER))结果转换类型,size_t应该最终为unsigned int类型。
宏功能:从结构体(type)某成员变量(member)指针(ptr)来求出该结构体(type)的首指针。
1 #define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER )
宏功能:获得一个结构体变量成员在此结构体中的偏移量
1. ( (TYPE *)0 ) 将零转型为TYPE类型指针;
2. ((TYPE *)0)->MEMBER 访问结构中的数据成员;
3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址,即相对于0的偏移量,要的就这个;
4.(size_t)(&(((TYPE*)0)->MEMBER))结果转换类型,size_t应该最终为unsigned int类型。
#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );})
宏功能:从结构体(type)某成员变量(member)指针(ptr)来求出该结构体(type)的首指针。
相关文章推荐
- C/C++复习:计算该日是该年的第几天(结构体)
- 由结构体成员地址计算结构体地址——节点地址的函数list_entry()原理详解
- C 语言复习与提高---VII. 结构体与共用体
- 根据结构体里面元素的某个地址计算机构体地址
- 根据结构体里面元素的某个地址计算机构体地址
- #9:C语言复习:结构体与枚举,共用体;
- C语言数据类型大小和结构体中变量的地址分配方法【整理】
- C语言结构体属性的偏移量计算——关于offsetof函数的详解
- 结构体计算某个field的地址偏移
- C/C++复习:小数计算(结构体)
- 由结构体成员地址计算结构体地址——list_entry()原理详解
- 关于用list_head 来计算结构体地址的问题
- 通过结构体某个成员的地址计算结构体首地址
- C语言结构体及其成员地址的互算
- 你会计算 C 语言中的结构体的大小吗?
- C语言结构体变量内存分配与地址对齐
- 易语言 取结构体指针 计算结构体大小 复制结构体
- C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用
- 通过结构体某个成员的地址计算结构体首地址[转]
- 算法分析_运行时间计算的一般法则----C 语言复习