模拟实现offsrtof

写一个宏,计算结构体中某变量对于首地址的偏移

设计思路:

1.偏移量,用每个所求元素的地址减去结构体初始值的地址可得

2.如计算图示,第一个元素的偏移量=结构体初始值必为0,第二个为4,其次为6,最后为8。

(1)故可以将初始值地址设置为0,0所指向的地址的距离=变量对于首地址的偏移值

(2)将0强制转换为结构体类型名,使得初始值置0(这个方法只能在宏定义中使用,不能在函数中使用)

​​​​​​​

错误:

1.老是搞不清要传的参数是"struct"、"struct MyStruct"、"struct s"、"MyStruct s"、"s"中的哪个

2.有思路不会实现,比如强转转哪个参数不确定

cpp 复制代码
#define MY_OFFSRTOF(struct_name,member_name) (int)&(((struct_name*)0)->member_name)
typedef struct MyStruct
{
	int a;
	short b;
	char c;
	int d;
}s;
int main()
{
	printf("%d\n", MY_OFFSRTOF(s, a));
	printf("%d\n", MY_OFFSRTOF(s, b));
	printf("%d\n", MY_OFFSRTOF(s, c));
	printf("%d\n", MY_OFFSRTOF(s, d));
	return 0;
}
相关推荐
zh_xuan5 分钟前
LeeCode 57. 插入区间
c语言·开发语言·数据结构·算法
2401_853448239 分钟前
C嘎嘎类里面的额函数
c语言·开发语言·c++
莫有杯子的龙潭峡谷12 分钟前
4.4 代码随想录第三十五天打卡
c++·算法
luckyme_17 分钟前
leetcode 代码随想录 数组-区间和
c++·算法·leetcode
好好学习^按时吃饭27 分钟前
蓝桥杯2024年第十五届省赛真题-R 格式
算法·蓝桥杯
手握风云-1 小时前
优选算法的妙思之流:分治——快排专题
数据结构·算法
熬夜苦读学习1 小时前
Linux进程信号
linux·c++·算法
白白糖1 小时前
二叉树 递归
python·算法·力扣
jyyyx的算法博客1 小时前
Leetcode 857 -- 贪心 | 数学
算法·leetcode·贪心·嗜血
ChoSeitaku1 小时前
NO.64十六届蓝桥杯备战|基础算法-简单贪心|货仓选址|最大子段和|纪念品分组|排座椅|矩阵消除(C++)
算法·矩阵·蓝桥杯