获取结构体中的字段偏移量或结构体地址
来源:互联网 发布:阳光姐姐嘉年华淘宝网 编辑:程序博客网 时间:2024/06/16 21:35
获取一个结构体中的某字段的偏移量,linux的内核代码中是这样定义实现的:
offset = (unsigned long)(&((type*)0))->member); 其中type就是结构体类型,member即某字段名。
这里简单的说明一下这句代码的意思,本来(type*)0就是一个空指针,使用空指针引用成员肯定会造成段错误,但是重点就是前门的
&这个符号,&符号表示我们只是取那个字段的地址,而不是要去引用这个字段的内容,所以不会造成段错误。
另外结构体中的字段在内存中分配的地址是连续的,当我们去读取某个字段时,就比如&((type*)0)->member,会先取结构体类型
type的地址,然后再计算member字段的偏移量(offset),再将type的地址加上member字段的偏移量,得到member字段真正的地
址,而这个动作是编译器帮我们完成的。
那么利用这个特性,我们就有办法得到member的偏移量。比如&ptr->member取member的地址,所以如果ptr的地址是100的话,那
么member的地址就是100+offset。那如果ptr是0的话,这样得到的结果就是offset,也就是member在type结构体中的偏移量。
最后而且利用这个特性,当知道member的地址时,我们也很容易得到结构体的地址值,即p = (type*)((char*)(ptr)-(unsigned long)(&((type*)0)->member))。
- 获取结构体中的字段偏移量或结构体地址
- 计算结构体成员地址偏移量...
- 结构体偏移量
- 结构体偏移量
- 不实例化结构体获取结构体成员在结构体中的偏移量
- 结构体(struct)中的偏移量计算
- 结构体的偏移量
- 结构体的偏移量
- 结构体成员偏移量
- 计算结构体偏移量
- 结构体的偏移量
- 通过地址偏移量访问C++结构体数据成员
- 使用宏定义来获取一个结构体成员相对于该结构体首地址的偏移量
- c语言 获取结构体成员偏移量方法
- 指针用法之一:给定结构体求某变量的偏移量,给出某变量偏移量求结构体首地址
- 结构体成员偏移地址
- 关于结构体的偏移量
- 求结构体成员的偏移量
- OpenCV中特征点提取和匹配的通用方法
- 几种设置表单元素中文本输入框不可编辑的方法
- jQuery判断单选框是否被选中
- 让输入框默认时间为今天
- 简单计算器实现(C++)
- 获取结构体中的字段偏移量或结构体地址
- 时间大小比较
- 为什么jdk中把String类设计成final?
- 69
- 图片上传大致思路
- UVa 612 - DNA Sorting
- Ubuntu 10.04 下安装codeblock
- suse linux原创案例02: 系统下英文环境下显示中文内容
- Linux-网桥原理分析 .