`

C的offsetof和container_of

 
阅读更多

#include <stdio.h>

#include <stddef.h>

// #define offsetof(s, m)   (size_t)&(((s *)0)->m)

 

struct A

{

        int a;

        int b;

};

 

int main()

{

        printf("%d\n", offsetof(struct A, b));

        return 0;

}

http://blog.csdn.net/pengzhixi/article/details/4275887

 

#define container_of(ptr, type, member) \

  ((type *) ((char *) (ptr) - offsetof(type, member)))

 

分享到:
评论

相关推荐

    memoffset:Rust的offsetof

    类似于Rust结构的offset_of功能。 引入以下宏: offset_of! 用于获取结构成员的偏移量。 offset_of_tuple! 用于获取元组成员的偏移量。 (需要Rust 1.20+) span_of! 用于获取一个或多个字段跨度的范围。 ...

    深度剖析C语言结构体

    Linux内核的实现博大精深,从offsetof的实现到后面的container_of,为什么通过结构体的的成员就能获得整个结构体的指针呢?这就得益于offsetof宏的实现。关于这个宏,前面的博文也有讲解,但不够深入,今天的这个...

    《C深度解析》第7、8章 结构体/共用体/枚举,杂项(自动类型转换、大小端序等)

    结构体结构体定义、访问、传参,结构体对齐(offsetof宏、contaner_of宏),结构体内嵌函数指针,程序分层,模块化等。2. 共用体共用体与结构体的异同、共用体的作用、共用体举例3. 枚举第8章:自动类型转换、大小...

    linux内核 0.11版本源码 带中文注释

    定义了NULL, offsetof(TYPE, MEMBER)。 #include &lt;stdarg.h&gt; // 标准参数头文件。以宏的形式定义变量参数列表。主要说明了-个 // 类型(va_list)和三个宏(va_start, va_arg 和va_end),vsprintf、 // vprintf、...

    C语言中结构体偏移及结构体成员变量访问方式的问题讨论

    c语言结构体偏移 示例1 我们先来定义一下需求: 已知结构体类型定义如下: ...如果你对c语言的库函数比较熟悉的话,那么你第一个想到的肯定是offsetof函数(其实只是个宏而已,先姑且这样叫着吧),我们man 3 offset

    对mongoose源码的阅读,写的分享ppt,欢迎一起探讨

    对mongoose源码的分析,另外 分享了一些比较经典的用法,比如函数指针,strcspn实现,offsetof用法等等

    内存对齐(Memory alignment)

         在 C语言之结构体 章节里,对struct的功能和使用进行了详细的说明。「内存对齐」章节作为struct的一个扩充知识。事实也证明,实际开发中,关注结构体内存布局特性的同事寥寥无几。甚至某些同事表示从未去...

    Go程序设计语言

    简介 本书由《C程序设计语言》的作者Kernighan和...27613.1 unsafe.Sizeof、Alig[0no0]f 和Offsetof 27613.2 unsafe.Pointer 27813.3 示例:深度相等 28013.4 使用cgo调用C代码 28213.5 关于安全的注意事项 286

Global site tag (gtag.js) - Google Analytics