#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
宏的运行机理:
1. ( (TYPE *)0 ) 将零转型为TYPE类型指针; 
2. ((TYPE *)0)->MEMBER 访问结构中的数据成员; 
3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址; 
4.(size_t)(&(((TYPE*)0)->MEMBER))结果转换类型。巧妙之处在于将0转 换成(TYPE*),结构以内存空间首地址0作为起始地址,则成员地址自然为偏移地址;

时间: 2024-11-08 18:02:06

#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)的相关文章

理解#define offsetof(struct_t,member) ((int)&((struct_t *)0)->member)

#define offsetof(struct_t,member) ((int)&((struct_t *)0)->member) 这个东西很多人应该知道: offsetof是用来判断结构体中成员的偏移位置.他是一个宏定义. (struct_t *)0是一个指向struct_t类型的指针,其指针值为 0,所以其作用就是把从地址 0 开始的存储空间映射为一个 struct_t 类型的对象.((struct_t *)0)->member 是访问类型中的成员 member,相应地 &

WPF学习- 新建项目后自定义Main()[Type 'App' already defines a member called 'Main' with the same parameter types]

问题点: 在App.xaml.cs中自己添加Main方法,编译会出现如下报错: 错误 CS0111 类型“App”已定义了一个名为“Main”的具有相同参数类型的成员  错误 Type 'App' already defines a member called 'Main' with the same parameter types  错误 CS0017 程序定义了多个入口点.使用 /main (指定包含入口点的类型)进行编译.  原因: 默认方式新建WPF项目时,编译时会自动生成Main方法(

找不到从属程序集 Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"

“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\webservice\396619ef\64fa1a2a\assembly\dl3\d8aa258e\ea6ee7cd_64f0d001\System.Data.SQLite.dll”的激活上下文生成失败. 找不到从属程序集 Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken

java.sql.SQLException: Unknown type '246 in column 0 of 1 in binary-encoded result set的解决办法

最近在大学毕设项目基础上新增一些功能,基于Struts2开源框架,数据库采用的是MySQL.写完后台的新功能代码,单元测试也顺利通过,去整合前台,但是当使用JSP页面操作的时候,没想到报异常了.截图如下: java.sql.SQLException: Unknown type '246 in column 2 of 4 in binary-encoded result set. 纳闷了,为什么能够通过JUnit呢? 几经查找,都说是MySQL的bug,更换了MySQL新版本的驱动包,比如mysq

type和create type

type和create type 异同点:      create type 可在库中生成一个长期有效的自定义类型对象,而type作用域仅限于语句块中:      两者都可以自定义数据类型: 各种type实例: --[create type]***************************************************************** --①简单 type _object-------------------------------------- create

swift 中Value Type VS Class Type

ios 中Value Type 和 Class Type 有哪些异同点,这个问题是在微信的公共帐号中看到的,觉得挺有意思,这里梳理一下. 1.swift 中为什么要设置值类型? 值类型在参数传递.赋值的过程中采用的是Copy的过程,copy的"值"是该值所在的内存块,相比于class类型,copy更直接,没有对象中方法调用(饮用计数.copy方法等),因此效率更高.猜测swift引入的值类型主要是为了提高效率. 2.swift 存在哪些值类型 swift中常见的值类型有 struct,

reifiable type与raw type

下面的逻辑需要明白如下两个概念: 4.7. Reifiable Types 4.8. Raw Types 举几个是Reifiable Types的例子,如下: class A{} class B<T>{} class C<T>{ class D<X>{ } } class TestType{ public void test(){ //It refers to a non-generic class or interface type declaration. A a;

Type.MakeGenericType 方法 (Type[]) 泛型反射

替代由当前泛型类型定义的类型参数组成的类型数组的元素,并返回表示结果构造类型的 Type 对象. 命名空间:   System程序集:  mscorlib(mscorlib.dll 中) public virtual Type MakeGenericType( params Type[] typeArguments ) 参数typeArguments将代替当前泛型类型的类型参数的类型数组. 返回值Type: System.TypeType 表示的构造类型通过以下方式形成:用 typeArgume

input[type=&#39;submit&#39;]input[type=&#39;button&#39;]button等按钮在低版本的IE下面,去掉黑色边框的问题

今天做一个tabs效果的时候,发现上面的button在低版本下会出现黑色的边框,很难看,于是我整理了下几个去掉黑色边框的办法: 1.在button的外层嵌套一个div,设置button的border:none; <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <st