求教关于keil编译出错的问题

[复制链接]
3185|17
 楼主| jack_shine 发表于 2010-5-12 13:58 | 显示全部楼层 |阅读模式
uchar code array_1[6]={0x40,0x1f,0xff,0xff,0x00,0x1f};
uchar code array_5[8]={0xfe,0x1f,0x44,0x1f,0x44,0x2f,0x47,0xcf};
uchar code array_9[8]={0x7c,0x0f,0x82,0x1f,0x82,0x2f,0x7f,0xcf};
uchar code array_0[8]={0x7f,0xef,0x80,0x1f,0x80,0x1f,0x7f,0xef};
uchar code array_7[8]={0x80,0x0f,0x83,0xff,0x84,0x0f,0xf8,0x0f};
uchar code array_8[8]={0x7b,0xef,0x84,0x1f,0x84,0x1f,0x7b,0xef};
uchar code array_6[8]={0x3f,0xef,0x44,0x1f,0x84,0x1f,0x03,0xef};
uchar code array_3[8]={0x40,0x2f,0x84,0x1f,0x84,0x1f,0x7b,0xef};
uchar *p[]={array_1,array_5,array_9,array_0,array_1,array_7,array_8,array_6,array_7,array_5,array_3};

void phone_no_move()
{
while(*p!='\0')
{
  no_code=*p;
  send_cmd(0x0f00|no_code);
         p++;
         }
}

我写的代码如上,定义了一个指针数组,然后编译出现“p”:not a lvalue,
p++;的地方出现这种错误,还望哪位大侠指点小弟此错啥意思,如何修改,谢谢了!
}
mohanwei 发表于 2010-5-12 14:27 | 显示全部楼层
在你的代码里,p是一个固定数组名,所以不能更改。
变通方法1:定义一个指针,把p赋给它;
变通方法2:用p[i]的方式来访问,i可以++也可以--
ayb_ice 发表于 2010-5-12 14:45 | 显示全部楼层
这里P就是数组指针的地址(也就是就是P的地址),当然不能改变
numLiu 发表于 2010-5-12 15:22 | 显示全部楼层
uchar *p[]={array_1,array_5,array_9,array_0,array_1,array_7,array_8,array_6,array_7,array_5,array_3};
定义有问题。
ayb_ice 发表于 2010-5-12 15:58 | 显示全部楼层
LS
请问哪里有问题
tianma2005 发表于 2010-5-12 16:34 | 显示全部楼层
用p[i]来访问吧。
doomhaha 发表于 2010-5-12 16:39 | 显示全部楼层
*p[],p是数组名,数组中的每个元素是一个指针变量
 楼主| jack_shine 发表于 2010-5-13 09:05 | 显示全部楼层
2# mohanwei
谢谢,谢谢您的回复,不过下面有个类似的用法,没有报错,程序能够运行,同样是定义的指针数组,何解?还望大侠赐教,谢谢

uchar code str1[]="2010上海世博会";
uchar code str2[]="隆重开幕";
uchar code str3[]="热烈欢迎您";
uchar code str4[]="welcome!";
uchar *p[]={str1,str2,str3,str4};

void show_str(uchar add,uchar *p)
{
LCD12864_drive(0,add);//写入显示的首地址
while(*p!='\0')
{
   LCD12864_drive(1,*p);//向液晶写入数据
   p++;
}
}
 楼主| jack_shine 发表于 2010-5-13 09:07 | 显示全部楼层
3# ayb_ice
谢谢您的回复,参见#8的疑惑,还望赐教!
 楼主| jack_shine 发表于 2010-5-13 09:08 | 显示全部楼层
 楼主| jack_shine 发表于 2010-5-13 09:08 | 显示全部楼层
 楼主| jack_shine 发表于 2010-5-13 09:09 | 显示全部楼层
 楼主| jack_shine 发表于 2010-5-13 09:09 | 显示全部楼层
 楼主| jack_shine 发表于 2010-5-13 09:09 | 显示全部楼层
mohanwei 发表于 2010-5-13 10:03 | 显示全部楼层
8楼的void show_str(uchar add,uchar *p)里,*p是局部变量,存放在RAM里,当然能更改了……
 楼主| jack_shine 发表于 2010-5-13 13:31 | 显示全部楼层
15# mohanwei
哦,数组名表示一个数组的首地址,不能当变量使用吗,p++《=》p=p+1;难道非要重新赋给一个变量?谢谢了
epsmc 发表于 2010-5-13 17:23 | 显示全部楼层
uchar *p[]={array_1,array_5,array_9,array_0,array_1,array_7,array_8,array_6,array_7,array_5,array_3};
P是固定地址,不可++;
要改变另外定义个unsigned char *p1,把p的地址作为p1的初值。
例1错,例2对;因为例2的指针参数P非uchar *p[]的P,
 楼主| jack_shine 发表于 2010-5-14 08:44 | 显示全部楼层
17# epsmc
恩,知道了,十分感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:多关注自己专业的东西 网络上太多资料鸟,看来只适合查阅,不适合检阅鸭 技术交流群:206660396

3

主题

3044

帖子

2

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