指针的强制转换

今天遇到人问这方面问题,之前不知看哪个高人的博客:强制转换,归根结底就是内存布局的改变。确实如此,很多人认为很难去理解。实际上,对于我们弄底层的人来说,这应该很容易才对:内存中的数据存放的形式到底还是0101等二进制数字,但各种类型对应的字节数不一样,对于int一次取4个字节,而对于char一次则取1个字节,对于机器来说数还是那个数,只是你取多少的问题。对于其他的一些规则,网上太多了。

比如一个简单的(取自网上问题):

unsigned char bnum;
unsigned short dd=5392;
bnum=(char)(dd);
结果值是16,这是为什么?
转换前的dd: 2011040723133795.jpg
转换后的dd: 2011040723123735.jpg
需要注意的是变量dd当初定义的类型是没有改变的。
对于嵌入式开发人员来说,这是很好理解的;当然是有那么一些隐晦的,我个人觉得慢慢啃下就能发现个中道理。
指针的强制转换,注意是指针指向的内容有了变化而已,内容的变化和上述是一样的道理,指针本身是没变的(某些特殊情况不提)。
但是强制转换后,读取出来可能和想象的不一样哦,注意注意,注意转换后数据的读取方式:
2011040823154979.jpg
VS2005下:
2011040823163258.jpg

转载于:https://www.cnblogs.com/EmbeddedBoy/archive/2011/04/07/2008817.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值