打印

C语言碰到一个奇怪的问题了

[复制链接]
1182|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hclwj181|  楼主 | 2019-2-27 16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void abc()
{
  u8 i,temp3,temp2;
       temp3= length1;
       temp2 = length2;
        for (i = 0; i < temp3; i++)
        {
                addrval[i] = P16BIT[addr2+i];
        }
        for (i = 0; i < temp3; i++)
        {
                P16BIT[addr2+temp2+i] = addrval[i];
        }
}
void abc()
{
  u8 i,temp3,temp2;
temp3= length1;
       temp2 = length2;
        for (i = 0; i < temp3; i++)
        {
                P16BIT[addr2+temp2+i] = P16BIT[addr2+i];
        }
}
请教下各位大侠,上面两个简单的函数有什么区别了,addrval和P16BIT都是16bit的全局变量数组,使用上面那个结果是正确的,下面那个老是不对,调试了N多次,思考了半天始终觉得两个程序结果应该是一样的,可是下面那个就是不对,用上面那种写法就可以,崩溃中

相关帖子

沙发
kingkits| | 2019-2-27 16:47 | 只看该作者
当length2<length1时,数组后面的数据会有一部分数据丢失了,原因是你执行时,那部分被之前的操作覆盖了

使用特权

评论回复
板凳
wono01| | 2019-2-27 16:50 | 只看该作者
提问都不会提问,你把你做了哪些测试,测试的输入输出是啥,这样才能帮你看
另外你觉得不对直接把每次循环打出来就是了

使用特权

评论回复
地板
你瞅啥| | 2019-2-27 17:08 | 只看该作者
P16BIT[addr2+i]在循环中已经被改动了。

使用特权

评论回复
5
hclwj181|  楼主 | 2019-2-27 17:22 | 只看该作者
本帖最后由 hclwj181 于 2019-2-27 17:28 编辑

哦,是你说的这样,值在移动的时候给覆盖掉了,怪不得下面那种,每次都不对了,又犯了低级错误。有没有什么办法不覆盖又不用两次循环了

使用特权

评论回复
6
hclwj181|  楼主 | 2019-2-27 17:27 | 只看该作者
你瞅啥 发表于 2019-2-27 17:08
P16BIT[addr2+i]在循环中已经被改动了。

是啊,明白了,改动之后又赋值给了前面的了,加个中加变量,就没有。想问下有没有更好的办法不覆盖又不需要使用两次循环了

使用特权

评论回复
7
你瞅啥| | 2019-2-27 17:50 | 只看该作者
hclwj181 发表于 2019-2-27 17:27
是啊,明白了,改动之后又赋值给了前面的了,加个中加变量,就没有。想问下有没有更好的办法不覆盖又不需 ...

把 for (i = 0; i < temp3; i++)
改成 for (i = temp3; i >0; i--)

使用特权

评论回复
8
mcu5i51| | 2019-2-28 09:58 | 只看该作者
减法循环就可以了吧,只要定稿的位置是没用的“空位”就行

使用特权

评论回复
9
cjseng| | 2019-2-28 10:37 | 只看该作者
小狗转着圈咬自己的尾巴,把尾巴咬掉了

使用特权

评论回复
10
chenyong123| | 2019-2-28 10:50 | 只看该作者
本帖最后由 chenyong123 于 2019-2-28 13:22 编辑

把length2改成比length1大的值就行了

使用特权

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

本版积分规则

72

主题

720

帖子

9

粉丝