考考大家(KEIL C51)

[复制链接]
3215|10
 楼主| ayb_ice 发表于 2009-2-9 21:02 | 显示全部楼层 |阅读模式
// small模式下
unsigned char pdata x _at_ 0x10;
unsigned char data  y _at_ 0x10;
unsigned char data  z;

    x = 5;
    y = 6;
    z = ((unsigned char*)&x)[0];

    请问z=多少,为什么,不允许看反汇编.
hotpower 发表于 2009-2-9 22:09 | 显示全部楼层

俺肯定不及格~~~

computer00 发表于 2009-2-9 22:21 | 显示全部楼层

看起来指就是y的值吧...俺仿真看看结果先...

computer00 发表于 2009-2-9 22:27 | 显示全部楼层

晕...结果访问的是x...看来还是写清楚安全啊...

z = ((unsigned char data *)&x)[0];
 这样它就跑不掉了...
yslf1985 发表于 2009-2-9 23:32 | 显示全部楼层

阿门~

对我来说太深奥了。。
xzhenggen 发表于 2009-2-10 08:37 | 显示全部楼层

((unsigned char*)&x)[0];这不就是X的绝对地址吗?

((unsigned char*)&x)[0];这不就是X的绝对地址吗?
lnskngdc 发表于 2009-2-10 09:38 | 显示全部楼层

实际中真有人这么编吗?

感觉有点怪怪的
我用keilc五年了,一直是老老实实的编代码,不敢用花里胡哨的方式,因为那会导致占用资源更多,易读性更差
 楼主| ayb_ice 发表于 2009-2-10 11:34 | 显示全部楼层

这可不是花里胡哨

  其实KEIL是很聪明的,会自动根据变量类型指向同类型,当然前提是不能人为指向具体空间,这对移植程序很有利,试想如果不是这样的结果,如果修改了变量的存储空间,移植是多么麻烦的事情.
  我也是无意中发现的.
computer00 发表于 2009-2-10 12:10 | 显示全部楼层

依赖编译器不是件好事啊...还是明确指定为妙。

 楼主| ayb_ice 发表于 2009-2-10 12:29 | 显示全部楼层

LS,明指不利于移植程序

我正是在修改存储空间时发现这个的,我也是想要KEIL的结果.
HotTask51 发表于 2009-2-11 09:54 | 显示全部楼层

哈哈~~~

您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

15494

帖子

34

粉丝
快速回复 在线客服 返回列表 返回顶部