找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1717|回复: 10
收起左侧

关于C语言指针和数组,求大神们指教 万分感谢

[复制链接]
ID:766396 发表于 2021-7-1 22:03 | 显示全部楼层 |阅读模式
下面报了一个警告,并且得到的结果不对 ,void Transition(uint8 *dat)这个函数我就是这样写的没有错误  但是为什么到void dis_led(uint8 *ddata)这个函数使用起来就有错误了呢,求大神们指导小弟一下  万分感谢!

单片机源程序如下:
void dis_led(uint8 *ddata)
{
        uint8 i;
        for(i=0;i<=7;i++)
        {
                P2=P2&0xe3|wei[ i];
                P0=ddata[ i];
                delay(3);
                P0=0;
        }                        
}


uint8 Ascall_Dispose(uint8 dat)
{
        if(dat>=0x30&&dat<=0x39)
        return duan_num[dat-48];
        if(dat>=0x41&&dat<=0x5a)
        return duan_big_letter[dat-65];
        if(dat>=0x61&&dat<=0x7a)   
        return duan_small_letter[dat-97];
        return 0x00;         
}
void Transition(uint8 *dat)
{
        uint8 i,i1;
        static dis_buff[9];
        static dis_step=0,point_place=0;
        do
        {
                switch(dis_step)
                {
                        case 0:
                                        for(i=0;i<8;i++)
                                        {
                                                if(dat[ i]==0x2e)
                                                {
                                                        point_place=i;
                                                        dis_step=1;        
                                                }
                                                dis_buff[ i]=Ascall_Dispose(dat[ i]);
                                        }
                                        dis_step=2;        
                                        break;
                        case 1:
                                        for(i=point_place;i<8;i++)
                                        {
                                                dis_buff[ i]=Ascall_Dispose(dat[i+1]);               
                                        }
                                        dis_buff[point_place]=dis_buff[point_place]|0x80;
                                        dis_step=2;               
                        case 2:
                                        dis_led(dis_buff);                         //[ i] //这个地方报警告   DIS_LED.C(81): warning C182: pointer to different objects   
//                                        for(i1=0;i1<8;i1++)
//                                        {
//                                                Dis_buff1[i1]=dis_buff[i1];        
//                                        }
                                        dis_step=0;                                       
                }        
        }while(dis_step!=0);
}
void main()
{
        strcpy(Dis_buff,"12345678");
        while(1)
        {
                Transition(Dis_buff);
//                dis_led();
        }
}



回复

使用道具 举报

ID:883242 发表于 2021-7-1 23:53 | 显示全部楼层
c51别用指针,8051这个指令体系设计之初就没有考虑过高级语言,用指针只能让代码变得又慢又蠢,用指针起码要用STM8起步。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:161164 发表于 2021-7-2 00:48 | 显示全部楼层
本帖最后由 lkc8210 于 2021-7-2 09:32 编辑

因为没有宣告变数的型态
        static dis_buff[9];
Compiler会假设dis_buff的型态为int (4 Byte)
因为你贴的代码不完整,拫据可见的代码推断
uint8 是unsigned char (2 Byte)
所以在dis_led 的for loop中指向了其它地址了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:592807 发表于 2021-7-2 08:46 | 显示全部楼层
        static dis_buff[9];
        static dis_step=0,point_place=0;
没定义数组类型
回复

使用道具 举报

ID:404893 发表于 2021-7-2 08:47 | 显示全部楼层
Hephaestus 发表于 2021-7-1 23:53
c51别用指针,8051这个指令体系设计之初就没有考虑过高级语言,用指针只能让代码变得又慢又蠢,用指针起码 ...

第一次听到这种说法.....
回复

使用道具 举报

ID:450849 发表于 2021-7-2 09:00 来自手机 | 显示全部楼层
这个ddata是不是个关键字
回复

使用道具 举报

ID:744327 发表于 2021-7-2 09:06 | 显示全部楼层
ddata是指针变量,直接给数组首地址,应该不对。
回复

使用道具 举报

ID:766396 发表于 2021-7-3 21:42 | 显示全部楼层
lkc8210 发表于 2021-7-2 00:48
因为没有宣告变数的型态
        static dis_buff[9];
Compiler会假设dis_buff的型态为int (4 Byte)

是的  没定义变量的类型 ,已经调整过来了 ,感谢大哥
回复

使用道具 举报

ID:766396 发表于 2021-7-3 21:42 | 显示全部楼层
黄youhui 发表于 2021-7-2 08:46
static dis_buff[9];
        static dis_step=0,point_place=0;
没定义数组类型

是的,没定义数组的类型 ,已经调整过来了 ,感谢大哥
回复

使用道具 举报

ID:766396 发表于 2021-7-3 21:43 | 显示全部楼层
是没定义数组的类型导致的,感谢各位大哥!
回复

使用道具 举报

ID:948960 发表于 2021-7-4 11:51 | 显示全部楼层
建议看下c语言的书
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表