宏定义读取数据机构偏移量
来源:互联网 发布:c#书籍推荐知乎 编辑:程序博客网 时间:2024/05/01 09:33
在c语言中如何得到一个field在结构体(struct)中的偏移量?若用宏定义该怎么写?
ANSI C标准允许任何值为0的常量被强制转换成任何一种类型的指针,并且转换结果是一个NULL指针,因此((s*)0)的结果就是一个类型为s*的NULL指针。如果利用这个NULL指针来访问s的成员当然是非法的,但&(((s*)0)->m)的意图并非想存取s字段内容,而仅仅是计算当结构体实例的首址为((s*)0)时m字段的地址。聪明的编译器根本就不生成访问m的代码,而仅仅是根据s的内存布局和结构体实例首址在编译期计算这个(常量)地址,这样就完全避免了通过NULL指针访问内存的问题。将0转化成结构体起始地址再取成员地址:&((类型 *)0->成员)别忘了了取址符号,否则内存读写错误,代码如下:
#include <stdio.h>
#define MY_OFFSET(m,y) (&((m*)0)->y)
typedef struct _my_struct
{
int a;
int b;
int c;
}mystruct;
int main()
{
printf("a's offset of mystruct is %d\n",&((mystruct*)0)->a);
printf("b's offset of mystruct is %d\n",&((mystruct*)0)->b);
printf("b's offset of mystruct is %d\n",&((mystruct*)0)->c);
printf("a's offset of mystruct is %d\n",MY_OFFSET(mystruct,a));
printf("b's offset of mystruct is %d\n",MY_OFFSET(mystruct,b));
printf("b's offset of mystruct is %d\n",MY_OFFSET(mystruct,a));
return 0;
}
- 宏定义读取数据机构偏移量
- 求取结构体成员偏移量的宏定义
- P-结构体成员的偏移量---宏定义实现
- 结构体元素偏移量宏的定义及解析
- 根据字节偏移量读取文件
- 数据机构的基本定义
- 写宏定义:得到一个field在结构体(struct type)中的偏移量。
- 写宏定义:得到一个field在结构体(struct type)中的偏移量
- 宏定义求结构体某个变量相对其偏移量的问题
- 写宏定义:得到一个field在结构体(struct type)中的偏移量[转]
- 结构体成员偏移量,标准C其实有定义宏实现
- 用宏定义FIND求一个结构体里某个变量相对于sturct的偏移量
- 定义一个宏获取结构体中变量相对结构体开始的偏移量
- 用宏定义求结构体中某一个成员的偏移量
- 通过宏定义取结构本中成员的偏移量
- 宏定义:得到一个field在结构体(struct type)中的偏移量
- 宏定义:得到一个field在结构体(struct type)中的偏移量
- 偏移量
- 开发者:iOS和Android平台优劣比较
- android配置中出现的问题
- 工作……
- 正则表达式30分钟入门教程
- GLSL学习笔记
- 宏定义读取数据机构偏移量
- arx2010在vs2008中fatal error C1083: Cannot open include file: 'type_traits'
- django网站部署
- 设置Webview的滚动条属性- 滚动条白边解决方法
- 组合
- 模式识别经常用到的距离测度
- 各式各样的正则表达式参考大全
- unix--文件管理01
- 西南/重庆大学2012年 自考本科生申请学士学位通知