码迷,mamicode.com
首页 > 其他好文 > 详细

offsetof的使用

时间:2014-11-16 12:00:36      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   ar   使用   sp   for   div   

#include <stddef.h>
#define offsetof ( TYPE, m)   (size_t )&reinterpret_cast< const volatile char&>(((( TYPE *)0)->m))
宏功能:获得一个结构体变量成员在此结构体中的偏移量。通过获取偏移量取得结构体的地址
 bubuko.com,布布扣
bubuko.com,布布扣
 
/*  Takes a pointer to a member variable and computes pointer to the structure
    that contains it. ‘type‘ is type of the structure, not the member. */
#define nn_cont (ptr, type, member ) \
    (ptr ? (( type*) (((char *) ptr) - offsetof(type , member))) : NULL)
 
这个宏是通过知道ptr的地址,这个地址也是member的地址,使用offsetof计算menber的偏移量,ptr-member的偏移量获得
type结构体变量的地址。
 
 
在nanomsg代码中,
  for ( it = nn_list_begin (&self. socktypes);
          it != nn_list_end (&self. socktypes);
          it = nn_list_next (&self. socktypes, it )) {
        socktype = nn_cont (it, struct nn_socktype , item);
        ......
        }
 
    socktypes 是个链表,保存着结构体 nn_socktype 的 item 成员,所以it指向的是成员item的地址,通过item的地址获得
    结构体nn_socktype 的变量 socktype 。 
 
 
 
 
 
 
 
 
 

offsetof的使用

标签:style   blog   http   color   ar   使用   sp   for   div   

原文地址:http://www.cnblogs.com/bizhu/p/4101201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!