C 不同类型指针的相互转化

本文探讨了C语言中关于不同类型的指针能否相互转化的问题。通过实验验证,作者指出指针本质上是内存块的地址,类型用于解析内存块的规则。虽然编译器通常会阻止不匹配的指针操作,但理论上可能存在规避限制的方法。在测试程序中,展示了如何通过结构体指针访问内存块的不同域,并解释了字节对齐的影响。
摘要由CSDN通过智能技术生成


        写C已经有一段时间了,今天听到有人说C的不同指针类型不能相互转化!我不相信,但毕竟对方资历比我深,慎重起见,只是笑过。

        但一直想着这个问题,于是刚才写了一个简单的Demo,测试了C指针的性能!年轻就是要敢于质疑!


        我还记得之前看过Windows程序设计时,很多函数使用了类似 以下的写法,所以才确信自己的想法!    

     void* p;
     p=(void*)fs;    // FILE* fs;

        

        我对C指针的理解是:指针只是一个内存块,内存块存的值就是地址,可以只是一个byte,也可以是多个byte连成的内存块的首地址。C的结构体就是一内存块,结构体指针即是指向此内存块的首地址,而指针的类型,用来表示这个内存块的解析规则,如第一个域是char,第二个域是int,则调用struct_name->char_domain时,是首地址,而调用的是int域时,即是首地址+4(不是加1,有字节对齐的情况)。那么用任意的解析规则也是可以的!就是怕崩掉!编译器会阻止。不过不排除有谁能骗过编译器的情况啊!

        此程序在win7 操作系统上测试通过,使用MinGW gcc 3.4.0编译器。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值