文档章节

offsetof宏—求结构体中一个成员在该结构体中的偏移量

溪边九节
 溪边九节
发布于 2014/04/14 09:44
字数 182
阅读 109
收藏 0

该宏用于求结构体中一个成员在该结构体中的偏移量。

该宏被写作:

size_t offsetof( structName, memberName );

第一个参数是结构体的名字,

第二个参数是结构体成员的名字。

该宏返回结构体structName中成员memberName的偏移量。

偏移量是size_t类型的。

=========================================================================

#include<stdio.h>
#include<stdlib.h>
#include <stddef.h>//offsetof(type,member);
typedef struct
{
  char a;
  int b;
  int c;
}node_t;
int main()
{
  unsigned char *p = NULL;
  node_t node;
  node.a = 1;
  node.b = 22;
  node.c = 33; 
 
  p = (unsigned char *)&node;
  printf("size = %d\n",offsetof(node_t,c));
  printf("node.c = %d\n",*(p+offsetof(node_t,c)));
  return 1;  
}
/*
output:
size = 8
node.c = 33;
*/


© 著作权归作者所有

溪边九节

溪边九节

粉丝 43
博文 129
码字总数 107230
作品 1
南京
程序员
私信 提问
浅析linux中的宏contianer_of

container_of是linux中的一个宏,它的作用是通过结构体中某一成员的地址来获得该成员所在结构体的地址。其定义在include/linux/kernel.h中653行,如下所示: 下面对上述代码进行简单的介绍:...

拾月彷徨
2011/09/26
289
0
根据结构体变量地址反推结构体首地址

最近在看《Linux内核设计与实现》这本书,感觉写得非常棒,看第6章《内核数据结构》的时候,遇到两个非常牛B的宏,据此简单地设计一个考题,以便分析它们。 【题目】: 根据一个结构体某成员...

乐搏学院
2016/11/29
27
0
container_of详解

container_of详解 #define container_of(ptr, type, member) ({ \ const typeof(((type *)0)->member) * __mptr = (ptr); \ (type *)((char *)__mptr - offsetof(type, member)); } ) #defin......

长平狐
2013/06/03
199
0
C语言之offsetof宏和container_of宏

首先我们要明白一点通过结构体变量来访问结构体中的各个元素时,其本质上是 通过指针的方式来实现访问的,只不过是这个时候编译器帮自动帮我们计算了每个 元素与结构体起始地址之间的偏移量而...

科技小能手
2017/11/12
0
0
#define list_entry(ptr, type, member) \ container_of(ptr, type, member)

#define containerof(ptr, type, member) ({ const typeof( ((type )0)->member ) mptr = (ptr); (type )( (char )_mptr - offsetof(type,member) );}) 该宏在Linux内核代码(版本2.6.22)中定......

B_ice
2016/11/04
65
0

没有更多内容

加载失败,请刷新页面

加载更多

全面兼容IE6/IE7/IE8/FF的CSS HACK写法

浏览器市场的混乱,给设计师造成很大的麻烦,设计的页面兼容完这个浏览器还得兼容那个浏览器,本来ie6跟ff之间的兼容是很容易解决的。加上个ie7会麻烦点,ie8的出现就更头疼了,原来hack ie...

前端老手
18分钟前
3
0
常用快递电子面单批量打印api接口对接demo-JAVA示例

目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打...

程序的小猿
21分钟前
6
0
Yii 框架中rule规则必须搭配验证函数才能使用

public $store_id;public $user_id;public $page;public $limit;public $list;public $mch_list;public $cart_id;public $is_community;public $shop_id;public $cart_typ......

chenhongjiang
24分钟前
4
0
Flutter使用Rammus实现阿里云推送

前言: 最近新的Flutter项目有“阿里云推送通知”的需求,就是Flutter的App启动后检测到有新的通知,点击通知栏然后跳转到指定的页面。在这里我使用的是第三方插件Rammus来实现通知的推送,之...

EmilyWu
24分钟前
42
0
Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务

短网址顾名思义就是使用比较短的网址代替很长的网址。维基百科上面的解释是这样的: 短网址又称网址缩短、缩短网址、URL 缩短等,指的是一种互联网上的技术与服务,此服务可以提供一个非常短...

阿里巴巴云原生
39分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部