zoukankan      html  css  js  c++  java
  • offsetof的使用

    #include <stddef.h>
    #define offsetof ( TYPE, m)   (size_t )&reinterpret_cast< const volatile char&>(((( TYPE *)0)->m))
    宏功能:获得一个结构体变量成员在此结构体中的偏移量。通过获取偏移量取得结构体的地址
     
     
    /*  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 。 
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    UI进阶--控制器View的创建流程以及生命周期方法
    UI进阶--程序启动原理和UIApplication
    UI进阶--常见的项目文件介绍
    浅析 KVO 内部实现
    浅析 Get 和 Post 的区别
    C++实现进制转换
    UIBlurEffect 毛玻璃特效实现
    UITableView左滑显示选择
    排序算法(OC实现)
    valid Palindrome -- leetcode
  • 原文地址:https://www.cnblogs.com/bizhu/p/4101201.html
Copyright © 2011-2022 走看看