打印

问个很菜的问题

[复制链接]
1808|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小心有毒|  楼主 | 2008-10-8 22:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uchar xdata downRXbuff[120];                
uchar xdata downTXbuff[30];    
............................

uchar  *ptr;像这种指针能不指指向xdata的地址呢?即能不能像ptr=downTXbuff;这样指向downTXbuff数组地址呢;

相关帖子

沙发
呆板书生| | 2008-10-8 22:26 | 只看该作者

uchar *ptr

指向所有地址,无论是在data,idata,xdata,甚至code都没有问题。

如果要特指xdata,则uchar xdata *ptr才行

使用特权

评论回复
板凳
computer00| | 2008-10-8 22:49 | 只看该作者

keil中,没有特殊声明的char指针,要占3个字节,可以指向任意

其中一个字节保存指针类型,另两字节保存位置。有点像C++里面的重载,它会自动根据类型帮你设置好的

使用特权

评论回复
地板
小心有毒|  楼主 | 2008-10-9 22:51 | 只看该作者

2楼说得对

我用keil调试看过了,*Ptr像2楼所说的一样,能指向xdata区,而xdata *fmt则只能指向xdata区,如果用fmt指向一个data区的数据区时不起作用。
         uchar xdata downTXbuff[30]={2,3,5,6};
         uint HisError[4]={1,2,3,4,};
    uchar xdata txbuff[4];
         uchar xdata txbuf1[4];
    uchar *ptr;
    uchar xdata *fmt;
    ptr=downTXbuff;
    fmt=HisError;
    for(;i<4;i++)
    {
        txbuff=*ptr++;    1
        txbuf1=*fmt++;    2
    }
1:能把downTXbuff区的数据送进txbuff
2:不能把HisError区的数据送进txbuf1

使用特权

评论回复
5
hkap| | 2008-10-10 12:34 | 只看该作者

uchar *ptr 是通用指针,而uchar xdata *fmt是特定指针

特定指针只能指向相同类型的地址变量

使用特权

评论回复
6
zgl7903| | 2008-10-10 22:48 | 只看该作者

keil中的char*指针取决于编译时选择的内存模式

正真能通用的是void* 可以指向任何区域

使用特权

评论回复
7
hgjinwei| | 2008-10-10 22:55 | 只看该作者

回复6楼

void* 主要不是指可以指向任何区域,而是可以指向任何类型数据.
keil中没有特殊声明的指针(声明类型除外)可以指向所有区域.

使用特权

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

本版积分规则

11

主题

37

帖子

0

粉丝