【C语言】offsetof模拟实现

简介: offsetof模拟实现

offsetof介绍

size_t offsetof( structName, memberName )

功能:计算结构体成员相对于起始位置的偏移量

返回值:返回结构体成员相对于起始位置的偏移量


模拟实现

把结构体的初始地址设置为0,此时结构体成员的地址大小就是它所对应的偏移量


#define MY_OFFSETOF(structName,memberName) (unsigned int)&(((structName*)0)->memberName)


测试

#include<stdio.h>
struct S
{
  char c;
  int arr[5];
};
#define MY_OFFSETOF(structName,memberName) (unsigned int)&(((structName*)0)->memberName)
int main()
{
  struct S s = { 0 };
  printf("%d\n", MY_OFFSETOF(struct S, arr));
  return 0;
}
相关文章
|
2月前
|
C语言
【C语言】库宏offsetof(结构体成员偏移量计算宏)
【C语言】库宏offsetof(结构体成员偏移量计算宏)
27 0
|
2月前
|
存储 编译器 Linux
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
|
19天前
|
安全 编译器 C语言
【C语言进阶篇】offsetof宏的介绍 及其实现
【C语言进阶篇】offsetof宏的介绍 及其实现
|
2月前
|
C语言
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)(下)
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)
29 0
|
2月前
|
C语言
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)(上)
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)
92 0
|
9月前
|
C语言
C语言的offsetof宏模拟和用宏实现交换奇偶位
C语言的offsetof宏模拟和用宏实现交换奇偶位
|
12月前
|
C语言 C++
【C语言】结构体与offsetof实现(下)
【C语言】结构体与offsetof实现(下)
57 0
|
12月前
|
编译器 C语言 C++
【C语言】结构体与offsetof实现(上)
【C语言】结构体与offsetof实现
52 0
【C语言】交换奇偶位和 offsetof 宏的实现
【C语言】交换奇偶位和 offsetof 宏的实现
【C语言】交换奇偶位和 offsetof 宏的实现