转自:http://www.cppblog.com/lovedday/archive/2007/09/24/32801.html
今天看代码时,发现一个有用的东东,offsetof(s,m),这是一个宏,MSDN文档的说明如下:
Retrieves the offset of a member from the beginning of its parent structure.
size_
转载
精选
2009-08-04 12:59:25
1020阅读
1.宏原型功能:计算结构体成员地址相对于结构体起始位置的偏移量。输入:结构体名字structName,成员名memberName。输出:偏移量,大于等于0的整数。2.代码思路取得结构体地址和成员的地址,再用成员的地址转换成char类型减去转成char类型的结构体地址即可。即返回值=(char*)成员地址-(char*)结构体地址。但是我们只传入结构体名和成员名,没有传入具体的变量,怎么来获得结构体
在linux驱动源码中,有两个很有意思的宏,分别是offsetof和container_of,他们的作用和定义是这样子的offsetof获得结构体某成员相对于结构体的偏移长度/***计算的结构体中某成员的偏移量*/#defineoffsetof(TYPE,MEMBER)((size_t)&((TYPE*)0)->MEMBER)这个实现很巧妙,相当于设结构体的整体地址设成0,然后它的成
原创
2018-03-01 11:46:16
793阅读
1、前言 今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大。offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址来获取结构体的地址。两个宏设计的很巧妙,值得学习。linux内核中有着两个宏的定义,并在链表结构中得到应用。不得不提一下linux内核中的链表,设计的如此之妙,只需要两个指针就搞定了。后续认真研究一下
原创
2022-01-13 15:16:00
329阅读
offsetof 和 container_of 宏是 C 语言中常用于结构体操作的两个宏,它们帮助程序员处理指针偏移和结构体的成员与结构体本身之间的关系。下面是对这两个宏的总结及其应用的详细介绍。1. offsetof 宏作用offsetof 宏用来获取结构体成员相对于结构体起始位置的偏移量。它返回一个 size_t
首先我们要明白一点通过结构体变量来访问结构体中的各个元素时,其本质上是通过指针的方式来实现访问的,只不过是这个时候编译器帮自动帮我们计算了每个元素与结构体起始地址之间的偏移量而已一:offsetof宏:#define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER)1
原创
2016-10-17 16:20:47
2097阅读
#include <stdio.h>
#define OFFSETOF(type, member) (size_t)&(((type*)0)->member)
struct Point {
int x;
float y;
};
int main() {
printf("Offset of x: %zu\n", OFFSET
offsetof container_of
原创
2019-01-06 14:11:08
625阅读
今天我们来看看Linux中的两个经典的宏:offsetof与container_of。下来我们先来看看它们两个的宏定义,如下#ifndefoffsetof#defineoffsetof(TYPE,MEMBER)((size_t)&((TYPE*)0)->MEMBER)#endif#ifndefcontainer_of#definecontainer_of(ptr,type,member)({\co
原创
2018-09-05 22:24:24
4421阅读
offsetof宏的作用是获取结构体中某个成员相对于结构体起始地址的偏移量。通过计算成员在结构体中的位置,它提供了一种可移植的方法来确定偏移量。
hello, 大家好,今天和大家一起学习 Linux 内核中常见的两个宏 offsetof 和 container_of。对于初学者,很容易弄懵逼。offsetof 宏
定义:include/linux/stddef.h
;功能:给定一个TYPE结构和其成员,获取其成员相对于首地址的偏移。#define offsetof(TYPE, MEMBER) ((size_t) &((TYP
原创
2022-03-07 16:49:24
398阅读
问: #define offsetof(struct_t,member) ((size_t)&((struct_t *)0)->member) 答:(struct_t *)0是一个指向struct_t类型的指针,其
转载
2023-01-05 12:29:11
72阅读
一、函数原型#include <stddef.h>size_t offsetof(type, member);参数:type:某种类型(结构体等) member:type类型结构中某一成员返回值:返回给定类型中给定成员的偏移量,以字节为单位二、注意事项这个宏很有用,因为组成结构的字段的大小在不同的实现中可能不同,编译器可能插入不同的数字。字段之间的填充...
原创
2021-08-28 09:59:44
102阅读
一、函数原型#include <stddef.h>size_t offsetof(type, member);参数:type:某种类型(结构体等) member:type类型结构中某一成员返回值:返回给定类型中给定成员的偏移量,以字节为单位二、注意事项这个宏很有用,因为组成结构的字段的大小在不同的实现中可能不同,编译器可能插入不同的数字。字段之间的填充...
原创
2022-03-11 14:21:48
150阅读
Linux内核中的offsetof宏是一种非常有用的工具,它可以用来计算特定结构体内成员的偏移量。在Linux内核中,很多地方都会用到offsetof宏来获取特定结构体成员的偏移量,这样可以方便地访问和操作结构体中的数据。
在Linux内核中,结构体是一种非常常见的数据类型,它可以用来组织和存储数据。结构体中的成员通常是不同类型的数据,而offsetof宏可以帮助我们计算这些成员在结构体中的偏移
原创
2024-04-29 11:19:48
145阅读
offsetof(TYPE, MEMBER)
该宏在Linux内核代码(版本2.6.22)中定义如下:#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);
分析:(TYPE *)0,将 0 强制转换为 TYPE 型指针,记 p = (TYPE *)0,p是指向TYPE的指针,它的值是0。那么
原创
2008-03-23 14:12:55
7191阅读
转载
2019-04-18 16:34:00
280阅读
2评论
使用实例:typedef struct { const AVClass *class; char *expr_str; AVExpr *expr; double var_values[VAR_VARS_NB]; enum AVMediaType type;} SetPTSContext;#defi...
转载
2014-04-28 14:13:00
95阅读
2评论
!在这里插入图片描述(https://s4.51cto.com/images/blog/202112/15183351_61b9c48fe5e2266791.png?xossprocess=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW
原创
2021-12-23 11:12:39
498阅读
本文告诉初学者如何使用(制作)宏、脚本、插件。Slash命令在了解一切之前,你需要知道什么是Slash命令。WoW允许你执行“斜线+命令名”这样简单的命令,你可以直接在聊天框输入,例如:输入“/follow”,跟随你的友方目标。你可以通过输入“/help”来获取一些常用的Slash命令。Slash命令有好几种类型。有些被设计来执行游戏动作,如“/follow, /assist, /cast”;有些
转载
2024-07-09 01:24:57
592阅读