做公司网站需要准备什么,时尚杂志排版设计,市场推广策略,哪个网站可以做信用社的题模拟实现offsetof #define offsetof(StructType, MemberName) (size_t)(((StructType *)0)-MemberName)
StructType是结构体类型名#xff0c;MemberName是成员名。具体操作方法是#xff1a;
1、先将0转换为一个结构体类型的指针#xff0c;相当于某个结构体的首…模拟实现offsetof #define offsetof(StructType, MemberName) (size_t)(((StructType *)0)-MemberName)
StructType是结构体类型名MemberName是成员名。具体操作方法是
1、先将0转换为一个结构体类型的指针相当于某个结构体的首地址是0。此时每一个成员的偏移量就成了相对0的偏移量这样就不需要减去首地址了。
2、对该指针用-访问其成员并取出地址由于结构体起始地址为0此时成员偏移量直接相当于对0的偏移量所以得到的值直接就是对首地址的偏移量。
3、取出该成员的地址强转成size_t并打印就求出了这个偏移量。
代码:
#includestdio.h
#include stddef.h
struct S {char c1;int i;char c2;
};
#define OFFSETOF(type,mem) (size_t)(((type*)0)-mem) //将0转化为结构题指针(type*)0
int main() { //通过结构体指针找到结构体对象后取出其地址printf(%d\n, OFFSETOF(struct S, c1));printf(%d\n, OFFSETOF(struct S, i));printf(%d\n, OFFSETOF(struct S, c2));return 0;
}
结果: