单片机编程。 keil中数组指针怎么用才规范呢?一直提示C182警告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机编程。 keil中数组指针怎么用才规范呢?一直提示C182警告相关的知识,希望对你有一定的参考价值。

我的本意是让数组指针bbb可以指向任意一个char数组,
在调用函数的时候给bbb赋值,然后在函数中可以利用(*p)[1]这样的形式来从数组取数
但是keil一直提示“warning c182: pointer to different objects ”
简化程序如下,求指点啊!!!!

#include <reg52.h>
char (*bbb)[3];

char aaa[3]=1,2,3;
void main()

bbb=&aaa;

while(1);

不是很懂。数组指针没用过,我是看百科提供的例子写的:
http://www.baidu.com/s?ie=utf-8&bs=51%E5%8D%95%E7%89%87%E6%9C%BA+%E5%BC%95%E8%84%9A+%E8%BE%93%E5%87%BA%E7%94%B5%E6%B5%81&f=8&rsv_bp=1&rsv_spt=3&wd=%E6%95%B0%E7%BB%84%E6%8C%87%E9%92%88&rsv_sug3=8&rsv_sug=0&rsv_sug4=305&rsv_sug1=5&inputT=2028
原文就是:
“数组指针的定义
数组名的指针,即数组首元素地址的指针。即是指向数组的指针。
例:int (*p)[10]; p即为指向数组的指针,又称数组指针。

我在写个单片机的程序,所以用keil。
有个显示函数,每次调用的时候希望它能显示不同的内容,各种需要显示的内容我保存在不同数组里。所以想用数组指针当入口参数来实现这个功能。
如果这样写是错的,应该怎么写呢?

希望有人能给个详细点的例子实现上述功能。
请不要避开数组指针,因为我就是要学着用

char* b;

char a[3]=1,2,3;
void main()

b=&a;
unsigned char i,vaule;

for(i=0;i<n;i++,b++)
vaule=*b;

就可以循环取出数组的值并赋值给 vaule了 或者 直接取a[2]的话就 *(b+2)就得了,为什么弄得那么复杂。指针+1就是表示取地址后面那个数了,自加就可以不断取后面的数
参考技术A

把选项卡中的Warinings降低一级就可以了,可选0级或者1级就没有警告了~

参考技术B 比如以下显示调用就是你说的情况。可以这样来处理
void LCD_Print(unsigned char x, unsigned char y, unsigned char *str)

  GotoXY(x,y);
  Print(str);

......................
dis[0]= Hour/10+0x30;
dis[1]= Hour%10+0x30;
dis[2]= ':';
dis[3]= Min_High;
dis[4]= Min_Low;
dis[5]= ':';
dis[6]= Sec_High;
dis[7]= Sec_Low;
LCD_Print(0,0,dis);
.....................

参考技术C 直接声明成char* bbb;就可以了。
你那样声明反而声明不符,而且在函数中也不能那样取偏移。追问

能不能给个具体例子,我不是很明白。
如果改成*bbb,那就是普通指针的,指向数组时还是出错

参考技术D 如果只是为了写C,就不要用KEIL,keil不是专门为C而开发的

keil2编51单片机程序c 指针赋值提示重复定义,怎么解决

uchar *p,a1[],a2[],a3[];a1[]="菜单1" p=a1;

参考技术A 1.
点击仿真start/stop
debug
2.
在disassembly窗口会看到c:0x066a(地址)编译器会自动分配地址
3.
对应地址位置双击,出现红色断点设置标志
4.
点击全速运行,在对应的断点处会停止运行,查应寄存器

以上是关于单片机编程。 keil中数组指针怎么用才规范呢?一直提示C182警告的主要内容,如果未能解决你的问题,请参考以下文章

keil2编51单片机程序c 指针赋值提示重复定义,怎么解决

keil51中怎么用C语言编程把处理得到的数据存到数据存储器中,掉电不会消失

keil C 编程初始化指针函数数组时出错

关于在KEIL中对字符数组赋值字符串操作的奇怪问题?

干货|单片机的指针怎么学?

yongc语言编写单片机程序,出现了堆栈溢出情况,怎么解决?堆栈指针怎么初始化?