结构体指针强制转化

本文深入探讨了C语言中结构体指针的类型转化原理,包括如何通过结构体指针访问成员以及将整型变量强制转化为结构体类型。分析了即使结构体在内存中不存在,仍能通过指针访问的机制,强调了编译器对内存地址的解读和内存中值的默认状态。同时提到了几个学习资源,如廖雪峰的Git教程和VS搜索技巧。
摘要由CSDN通过智能技术生成

类型转换也可以根据如下理解:

例如:b->num : 将 struct A a 所指向的内存单元以 struct B b的分布方式(利用 b)取得偏移为num 的值。
结构体声明如何内存的分布,
结构体指针声明结构体的首地址,
结构体成员声明该成员在结构体中的偏移地址。

解释如下:
1、首先要明确struct B b本身有一个值(在32位机上一般是32位),这个值代表着某个内存地址,比如这个首地址值是0x30000000,由于b被定义Struct B类型,那么编译器在编译源文件时就会认为b指向的是一个struct B的结构,这个结构的内容由一段连续的内存存储,(b->num)(b->type)(b->age)在struct B的定义中肯定是存在num、type、age三个的,这几个变量对一个struct B结构的地址偏移量是固定的,也就是说只要知道一个struct B结构的起始地址,就能计算出这个结构所包含的num、type、age的地址,由于B b的地址已知(由A a强制转换而来,所以编译器知道这个地址即a的首地址),b所含的num离b的偏移量已知,那么就能通过b实现对num的取值,在编译器编译C文件的时候并不管b中的nun是否定义

2、b被定义为struct B,而B中又包含b,那么编译器就认为b所指向的结构中存在num
3、b->num如果不发生保护错误,总是能取到一个值(这个值就是对b偏移一定距离的内存单元中的值),只是这个值不能确定是否是你期望的值
4、再次提醒,变量的值是存储在内存中的,每个内存字节对应一个内存地址,而内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z_shsf

来包瓜子嘛,谢谢客官~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值