打印

char xdata *data pdx;

[复制链接]
3867|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zxq1234508|  楼主 | 2007-5-11 15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一个变量定义的例子,各位看看我的理解是不是正确的。pdx的地址是在data区,pdx中的内容是一个在xdata区中的地址,pdx的长度是一个字节(0-0xff)。是这样理解吗?
如果这样的话,有个问题,xdata区的地址应该要大于0xff啊,而pdx的最大长度是0xff,这怎么解释?如果pdx的长度是2个字节的话就可以解释,但是定义的是char型,又说不过去了。
请教各位解释一下。

相关帖子

沙发
ayb_ice| | 2007-5-11 16:09 | 只看该作者

随便说说

char xdata *data pdx;
正确解释是:指针pdx指向xdata空间的char类型数据,指针本身存储在data空间...

使用特权

评论回复
板凳
xwj| | 2007-5-11 18:28 | 只看该作者

C51指明指向区间的指针是1或2字节,没指明的占3个字节

就如LS所说,
补充:
前面的char只影响指针的增量,
由于char、uchar只占8位(1字节),指针pdx加1间接寻址的地址增加1
如果定义int xdata *data pdx; 则pdx加1实际地址加2(2字节);
如果定义long xdata *data pdx; 则pdx加1实际地址加4(4字节);

有疑问时先去看编译器的帮助!讲的非常详细、清楚的。
Keil等常用软件网上都有翻译好的

使用特权

评论回复
地板
computer00| | 2007-5-11 18:58 | 只看该作者

这里的pdx是16bit的。

使用特权

评论回复
5
shinep| | 2007-5-11 22:20 | 只看该作者

好烦!

使用特权

评论回复
6
zxq1234508|  楼主 | 2007-5-12 09:13 | 只看该作者

再来一个个

xdata char kk _at_ 0x8000;
main()
{
kk=0x1234;
.......
}

#define kk XBYTE[0x8000]
main()
{
kk=0x1234;
.......
}
这样定义对吗?两者定义是不是样的?

使用特权

评论回复
7
computer00| | 2007-5-12 11:02 | 只看该作者

一个由编译器分配的变量,另一个是强制类型转化的指针

如果前者有地址重叠的话,编译器会给出警告,而后者不会.

使用特权

评论回复
8
ayb_ice| | 2007-5-12 16:15 | 只看该作者

回6楼

一个是给变量赋值,而另一个指针操作,两个kk根本不是一回事...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

486

帖子

0

粉丝