⭐️ 往期文章
✨链接1:C语言文件打开关闭详解、文件顺序读写详解。
✨链接2:C语言文件随机读写详解(fseek、ftell、rewind)。
✨链接3:C语言scanf/fscanf/sscnaf和printf/fprintf/sprintf的区别。
✨链接4:C语言打开文件一次既可以读又可以写。
✨链接5:C语言文件结束的判定(feof、ferror)。
✨链接6:宏和函数的区别详解。
✨链接7:C语言结构体计算大小结构体的对齐数,修改默认对齐数。
⭐️ offsetof
💬 宏原型:
size_t offsetof( structName, memberName );
structName结构体类型memberName结构体成员名字size_t offsetof返回一个size_t数,size_t是无符号数
💬 宏作用: 计算结构体成员相对于结构体类型的偏移量。
💬 宏头文件:#include <stddef.h>
⭕️ 宏的使用
#include <stddef.h>
#include <stdio.h>
struct S {
int a;
char c;
double d;
};
int main() {
printf("%d\n" , offsetof(struct S , a));
printf("%d\n" , offsetof(struct S, c));
printf("%d\n" , offsetof(struct S, d));
return 0;
}

⭕️ 宏的模拟实现
#define OFFSETOF(struct_type , name) ((size_t)&(((struct_type*)0)->name))
解析:

第一步把 0 转换为当前结构体类型的地址,在使用 -> 取到这个结构体的的成员。因为 0 已经是当前结构体类型的起始地址,所以结构体成员相对于结构体的偏移量就是当前成员的地址。在 & 之后强制类型转换为 size_t 类型。
✨学习结构体计算大小:C语言结构体计算大小结构体的对齐数,修改默认对齐数。












![[Eigen中文文档] 在 BLAS/LAPACK 、英特尔® MKL 和 CUDA 中使用 Eigen](https://img-blog.csdnimg.cn/358fbb477d3443c9abc1a775be3f46a6.png#pic_center)





