成员变量在结构体中的偏移——offsetof(type, member)
来源:互联网 发布:多久修一次眉毛知乎 编辑:程序博客网 时间:2024/05/24 04:00
size_t offsetof(type, member):看上去像个函数其实这是一个宏;用于求取member成员在类型为type的结构体中的偏移量;(member是type中的一个成员,否则会出错)。
先看一个例子,稍后再看其中的实现。
#include <stddef.h> #include <stdio.h> #include <stdlib.h> int main(void) { struct s { int i; char c; double d; char a[]; }; /* Output is compiler dependent */ printf("offsets: i=%ld; c=%ld; d=%ld a=%ld\n", (long) offsetof(struct s, i), (long) offsetof(struct s, c), (long) offsetof(struct s, d), (long) offsetof(struct s, a)); printf("sizeof(struct s)=%ld\n", (long) sizeof(struct s)); exit(0); }
编译运行输出结构:
offsets: i=0; c=4; d=8 a=16 sizeof(struct s)=16
其实现是:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
看明白了吗?把地址0强制转化为type的类型,然后取member变量的地址,再转为size_t就是偏移量了,size_t其实就是unsigned long类型。
- 成员变量在结构体中的偏移——offsetof(type, member)
- 成员变量在结构体中的偏移——offsetof(type, member)
- 结构体成员的偏移量与offsetof函数
- offsetof(TYPE, MEMBER)
- offsetof(TYPE, MEMBER) 解释
- offsetof(type, member) 问题
- offsetof(TYPE, MEMBER)
- offsetof(TYPE, MEMBER)
- 宏offsetof(TYPE, MEMBER)
- offsetof(TYPE, MEMBER)解释
- 如何求一个成员在结构体中的偏移
- 结构体成员变量的偏移值
- 结构体中成员变量偏移量
- OFFSETOF(s, m)的宏定义,s是结构类型,m是s的成员,求m在s中的偏移量。
- C语言结构体属性的偏移量计算——关于offsetof函数的详解
- 结构体偏移量函数offsetof
- offsetof(struct_type, member) : (type *)0
- 不实例化结构体获取结构体成员在结构体中的偏移量
- Tax module in Magento
- MFC TeeChart 用法整理一
- poj 2337
- STL 中map 和 set 的知识点总结
- C++ 使用win32API遍历文件夹
- 成员变量在结构体中的偏移——offsetof(type, member)
- POJ 2479 Maximum sum 动态规划 解题报告
- 透视投影的原理和实现
- 3通道图像RGB值读取和灰度图像灰度值读取
- 创建一个Direct3D设备g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
- iphone好的学习和博客地址
- sizeof和strlen解析
- ldap AD属性说明
- linux系统学习(一) (linux基础)