offsetof(struct_type, member) : (type *)0
2013-08-23 15:33
274 查看
#define container_of(ptr, type, member) ({ / const typeof( ((type *)0)->member ) *__mptr = (ptr); / (type *)( (char *)__mptr - offsetof(type,member) );})container_of :实现了根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针的功能。
【0地址指针】
(type *)0 : 好比:假设type结构存放于0其实的内存地址中(在编译的时候换算,不会执行。)((type *)0)->member : 0指针指向的type结构中的member成员
&((type *)0)->member : 0指针指向的type结构中的member成员的地址(相对于0地址,即得到member成员地址相对type结构体的相对偏移)
typeof (((type *)0)->member) 0指针指向的type结构中的member成员的类型
【offsetof()】
#define OFFSET(struct_type, member) ((size_t) &((struct_type *) 0)->member)【typeof ()】
typeof关键字是C语言中的一个新扩展,其的参数可以是两种形式:表达式或类型。比如:
extern int foo();
typeof(foo()) var; 等价于 int var;
例子2
typeof(int *) a,b;
等价于:
int *a,*b;
例子3
typeof(int *) p1,p2; /* Declares two int pointers p1, p2 */
int *p1, *p2;
typeof(int) *p3,p4;/* Declares int pointer p3 and int p4 */
int *p3, p4;
typeof(int [10]) a1, a2;/* Declares two arrays of integers */
int a1[10], a2[10];
相关文章推荐
- 成员变量在结构体中的偏移——offsetof(type, member)
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
- member access within misaligned address 0x000000000031 for type 'struct ListNode', which requires 8
- offsetof(TYPE, MEMBER)
- offsetof(TYPE, MEMBER)解释
- C语言中offsetof(TYPE,MEMBER)宏的解释
- #define offsetof(TYPE, MEMBER) (size_t)(&(((TYPE*)0)->MEMBER))
- 成员变量在结构体中的偏移——offsetof(type, member)
- LeetCodeBug-member access within null pointer of type 'struct ListNode'
- offsetof(TYPE, MEMBER)
- 如何解释 #define OFFSET(struct_type, member) ((size_t) &((struct_type *) 0)->member)
- offsetof(TYPE, MEMBER)宏和container_of(ptr, type, member)宏的实现
- offsetof(TYPE, MEMBER)
- offsetof(TYPE, MEMBER)和 container_of(ptr, type, member)
- offsetof(TYPE, MEMBER)
- offsetof(TYPE, MEMBER) 解释
- 基于VC++ 6.0下的offsetof(TYPE, MEMBER)个人实验心得
- member access within misaligned address 0x000100000001 for type 'struct ListNode', which requires 8
- offsetof(type, member) 问题
- 【转载】#344 - Hidden Base Class Member Is Invoked Based on Declared Type of Object