用一个宏定义FIND求一个结构体struct里某个变量相对struct的编移量
来源:互联网 发布:网络国际电话 编辑:程序博客网 时间:2024/06/03 10:21
用一个宏定义FIND求一个结构体struct里某个变量相对struct的编移量.
如:struct student
{
int a;
char b[20];
double ccc;
}
则:
FIND(student,a); //等于0
FIND(student,b);//等于4
#define FIND( struc, e ) (size_t)&(((struct*)0)- >e)
(struc*)0----------表示将常量0强制转化为struc *型指针所指向的地址
&(((struc*)0)- >e)--表示取结构体指针(struc*)0的成员e的地址,因为该结构体的首地址为0,所以其实就是得到了成员e距离结构体首地址的偏移量.
(size_t)-----------是一种数据类型,为了便于不同系统之间移植而定义的一种无符号型数据,一般为unsigned int
(struc*)0 表示假设在0地址处有一个结构体struc
((struc*)0)- >e 表示在0地址处的结构体struc的成员e
&(((struc*)0)- >e) 表示在0地址处的结构体struc的成员e 的地址
(size_t)&(((struc*)0)- >e) 将0地址处的结构体struc的成员e 的地址转换成整数类型
#define OFFSETOF(type, field) ((size_t)&(((type *)0)->field))
(type *)0:把0地址当成type类型的指针。
((type *)0)->field:对应域的变量。
&((type *)0)->field:取该变量的地址,其实就等于该域相对于0地址的偏移量。
(size_t)&(((type *)0)->field):将该地址(偏移量)转化为size_t型数据。
ANSI C标准允许任何值为0的常量被强制转换成任何一种类型的指针,并且转换结果是一个NULL指针,因此((s*)0)的结果就是一个类型为s*的NULL指 针。如果利用这个NULL指针来访问s的成员当然是非法的,但&(((s*)0)->m)的意图并非想存取s字段内容,而仅仅是计算当结构 体实例的首址为((s*)0)时m字段的地址。聪明的编译器根本就不生成访问m的代码,而仅仅是根据s的内存布局和结构体实例首址在编译期计算这个(常 量)地址,这样就完全避免了通过NULL指针访问内存的问题。
- 用一个宏定义FIND求一个结构体struct里某个变量相对struct的编移量
- 用一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量
- 用一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量.
- 用宏定义FIND求一个结构体struct里某个变量相对该结构体的编移量
- 【程序员面试宝典】【疑问】6.1宏定义 用一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量
- 求一个结构体struct里某个变量相对struc的编移量
- 用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量
- 用一个宏定义FIND求结构体某个变量相对编移量
- 用一个宏定义FIND求结构体某个变量相对编移量
- 用一个宏定义OFFSET求一个结构体里某个变量相对结构体的偏移量
- 用宏定义FIND求一个结构体里某个变量相对于sturct的偏移量
- 用一个宏定义求结构体某个变量相对编移量
- 求一个结构体A里某个变量相对A的偏移量
- 用一个宏求结构体某个变量的相对偏移量
- 用一个宏求结构体某个变量的相对偏移量
- 用一个宏求结构体某个变量的相对偏移量
- 宏定义求结构体某个变量相对其偏移量的问题
- 求一个结构体A里某个变量相对于A的偏移量
- NYOJ 359 Delete it 字符串处理
- 一步步教你粗暴破解宫爆老奶奶-APK反编译教程
- 我的设计模式学习之路1(单例模式)
- varnish 503的一种分析 nginx tomcat gzip
- 使用位运算实现乘法和乘方运算
- 用一个宏定义FIND求一个结构体struct里某个变量相对struct的编移量
- ORA-28001: the password has expired解决方法
- Windchill与Creo集成时如何配置ModelCHECK
- java db
- 开发系统的一点小看法
- Android应用程序消息处理机制(Looper、Handler)分析
- 编程之美系列之求子数组的最大乘积
- 【shell】sh: 0: getcwd() failed: No such file or directory
- 各种二分查找