整数0强转成指针类型的巧妙操作

您所在的位置:网站首页 如何把666666换成999999 整数0强转成指针类型的巧妙操作

整数0强转成指针类型的巧妙操作

2024-07-11 09:24| 来源: 网络整理| 查看: 265

整数0强转成指针类型的巧妙操作 在C语言中指针是一个整数相当于地址编号,如果给一个整数a强转成指针可以理解为该指针地址编号为a。下面就介绍下该方法应用在结构体中的巧妙之处。

typedef struct{ int a; char b; }Msg;

如上所示结构体Msg,如果将一个整数0强转成Msg可以理解为,Msg所在的首地址为0,那么((Msg *)0)->b,就可以理解为取结构体成员b的内容,但是我们自己知道其实0这个首地址并没有存储结构体Msg的信息,取内容也就毫无意义,所以我们不要取内容。我们看看对这个成员取地址(引用)会有什么事情发生,&(((Msg *)0)->b)就相当于结构体Msg的成员b的首地址。我们也可以换一种思维理解,其实&(((Msg *)0)->b)就是b相对于结构体首地址的偏移量,因为结构体首地址为0,偏移后的地址减去首地址就是偏移量,偏移后的地址-0=偏移量,那么偏移量就等于偏移后的地址,那么如果在对结构体成员做偏移处理的时候看着就非常清晰,而且后期维护添加成员使用这个方法源码不用做任何改动,因为无论增加多少成员偏移量都是动态的并不是用常量写死的。

以上内容均是作者查阅资料加自己理解,如有疑问,望读者不吝赐教,谢谢!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3